Как добавить дополнительное поле в сериализатор модели?

#django #django-rest-framework

#django #django-rest-framework

Вопрос:

Я очень новичок в django rest framework. У меня есть две модели ModelA и ModelB.

У меня есть поисковик ModelB для отображения всех полей в запросе get.

Из-за некоторых причин ModelA and ModelB , не связанных, FK но ModelA.objects.get(modelB.field1=modelA.pk) это вернет отдельные данные.

 class ModelASerailzer(serializers.ModelSerializer):

   class Meta:
        model = ModelA
        fields = ['f1','f2']


class ModelBSerailzer(serializers.ModelSerializer):
      # I want to do something like this here
         extra_field = ModelA.objects.get(modelB.field1=modelA.pk).f1 # this will return the data in shell 
                 #and normal django view but I don't know how to implement this in django rest ?
    class Meta:
        model = ModelB
        fields = ['field1','field2', 'extra_field']
  

Я пробовал так

 class ModelBSerializer(serializers.ModelSerializer):
    extra_field = serializers.SerializerMethodField()

    def get_extra_field(self, member):
        return ModelA.objects.get(pk=member.field).f1
    class Meta:
      model = ModelB
      fields = ['field1','field2', 'extra_field']
  

При этом я получил эту ошибку UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 0: invalid start byte

ModelA.objects.get(pk=member.field).f1 это файловое поле.

Ответ №1:

Попробуйте это (я не тестировал):

 class ModelBSerializer(serializers.ModelSerializer):
    extra_field = serializers.SerializerMethodField('get_extra_field')

    def get_extra_field(self, member):
        return ModelASerializer(ModelA.objects.get(pk=member.field)).data

    class Meta:
      model = ModelB
      fields = ['field1','field2', 'extra_field']