Django Rest Framework:从反向关系获取多个源字段

时间:2019-07-19 22:33:02

标签: django django-rest-framework

我的模特:

class A(models.Model):
    name = models.CharField('Name', max_length=250)
    content = models.TextField('Content')
    timestamp = models.DateTimeField(auto_now_add=True)
    b = models.ForeignKey('bs.B', blank=True, null=True, verbose_name='b', related_name='as')

class B(models.Model):
    name = models.CharField('Name', max_length=250)
    description = models.TextField('Description')
    timestamp = models.DateTimeField(auto_now_add=True)

我想序列化我的B模型并在其中包括多个字段,但不是全部。创建这样的序列化器:

class BSerializer(serializers.ModelSerializer):
    a_items = ASerializer(many=True, read_only=True, source='as')

    class Meta:
        model = B
        fields = '__all__'

为我提供了B个对象,它们包含a_items个字段,其中包含所有A个字段,但是我只想获取namecontent。我已经看过this的问题和答案,但是很遗憾,自DRF 3.0起,它不再支持field_to_native()方法。我将不胜感激从此处开始的任何提示,因为即使尝试添加source='as.name'似乎也不起作用,并且相关对象也消失了。我尝试在as.之后使用一些随机字符串,即使我希望这样做也不会失败。

1 个答案:

答案 0 :(得分:0)

好的,我想说这是超级hacky,我希望有更好的方法来做到这一点,但是我设法弯腰to_representation()来显示我的需求:

def to_representation(self, instance):
    data = super(BSerializer, self).to_representation(instance)
    data['a_items'] =self._get_foreign_key_values(data)
    return data

def _get_foreign_key_values(self, data):
    return [dict(name=value['name'], content=value['content']) for value in data]