Как сделать отношения, используя DRF для другой таблицы без ForeignKey - PullRequest
0 голосов
/ 06 ноября 2018

Я не могу сделать отношения между двумя таблицами без отношений.

Мои модели:

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"

Я уже заполнил модель логгера, но я не смог сделать exampleSerializer.

Мои сериализаторы:

 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')

в логгере сохраняет:

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

1 Ответ

0 голосов
/ 07 ноября 2018

Вы можете запросить последний логгер в поле зрения, а затем передать его сериализатору в контексте. Затем сделайте что-то вроде:

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

Вы переходите к контексту с чем-то вроде:

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

Также Вы можете сделать запрос в 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
...