我的模特:
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
个字段,但是我只想获取name
和content
。我已经看过this的问题和答案,但是很遗憾,自DRF 3.0起,它不再支持field_to_native()
方法。我将不胜感激从此处开始的任何提示,因为即使尝试添加source='as.name'
似乎也不起作用,并且相关对象也消失了。我尝试在as.
之后使用一些随机字符串,即使我希望这样做也不会失败。
答案 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]