How to add extra field in model serializer?

 ̄綄美尐妖づ 提交于 2021-01-29 07:40:25

问题


I am very new to django rest framework. I have two models ModelA and ModelB.

I have a ModelB searilzer to display all the fields in get request.

Because of some reasons ModelA and ModelB are not related by FK but ModelA.objects.get(modelB.field1=modelA.pk) this will return single data.

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

I tried like this

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

With this I got this error UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 0: invalid start byte

ModelA.objects.get(pk=member.field).f1 is a FileField.


回答1:


Try this (I haven't tested):

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


来源:https://stackoverflow.com/questions/64629500/how-to-add-extra-field-in-model-serializer

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!