简体   繁体   中英

How to do a relationship using DRF to another table without foreignKey

I can not do relatioships between two tables without relationships.

My models are :

class exampleModel(models.Model):
    quantity         = models.IntegerField(blank=False, null=True)
    comment          = models.CharField(max_length=100 , blank=True, null=True)
    class Meta:
        db_table = "example"
class Logger(models.Model):
    id_table = models.IntegerField() 
    table    = models.CharField(max_length=20 , blank=True, null=True) 
    comment  = models.CharField(max_length=100 , blank=True, null=True)  
    action   = models.CharField(max_length=100 , blank=True, null=True)
    date_created     = models.DateTimeField(auto_now_add=True)  
    class Meta:
        db_table = "logger"

I already have filled logger Model, but , I have not be able made the exampleSerializer .

My serializers are:

 class LoggerSerializer(serializers.ModelSerializer):
    class Meta:
       db_table = u'logger'
       model    = Logger
       fields   = '__all__'
class exampleSerializer(serializers.ModelSerializer):
    last_log = LoggerSerializer(read_only=True)
    class Meta:
        db_table = 'example'
        model = ExampleModel
        fields = ( 'id' , 'last_log' , 'quantity')

in logger saves :

id_table : 'primary key of example',
table : 'example'
comment : 'custom comment',
action : "CRUD"

You can query last logger in view, then pass it to serializer in context. Then do something like:

class exampleSerializer(serializers.ModelSerializer):
    last_log = serializers.SerializerMethodField()

    class Meta:
        db_table = 'example'
        model = ExampleModel
        fields = ('id', 'last_log', 'quantity')

    def get_last_log(self, obj):
        last_log = obj.state(self.context['last_log'])
        last_log_serializer = LoggerSerializer(last_log)
        return last_log_serializer.data

You pass to context, with something like:

exampleSerializer(queryset, context ={'last_log': last_log_object})

Also You can do the query in exampleSerializer :

class exampleSerializer(serializers.ModelSerializer):
    last_log = serializers.SerializerMethodField()

    class Meta:
        db_table = 'example'
        model = ExampleModel
        fields = ('id', 'last_log', 'quantity')

    def get_last_log(self, obj):
        logger_queryset =Logger.objects.filter(table = self.Meta.db_table, id_table = obj.id)
        return  LoggerSerializer(logger_queryset).data

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM