如何在api中包含相关字段?
class Foo(models.Model):
name = models.CharField(...)
class Bar(models.Model):
foo = models.ForeignKey(Foo)
description = models.CharField()
每个Foo都有几个与他有关的Bar,比如图像或者什么都有。
如何在Foo的资源中显示这些Bar?
使用tastypie它的退出简单,我不确定Django Rest Framework ..
答案 0 :(得分:8)
我搞定了! Shweeet!
好的,这就是我所做的:
为Django REST Framework的快速入门文档中描述的Bar对象创建了序列化程序,视图和URLS。
然后在Foo Serializer中我这样做了:
class FooSerializer(serializers.HyperlinkedModelSerializer):
# note the name bar should be the same than the model Bar
bar = serializers.ManyHyperlinkedRelatedField(
source='bar_set', # this is the model class name (and add set, this is how you call the reverse relation of bar)
view_name='bar-detail' # the name of the URL, required
)
class Meta:
model = Listing
Actualy它真的很简单,文档只是没有显示它我会说...
答案 1 :(得分:4)
现在,您可以通过简单地将反向关系添加到fields
元组来实现此目的。
在你的情况下:
class FooSerializer(serializers.ModelSerializer):
class Meta:
model = Foo
fields = (
'name',
'bar_set',
)
现在" bar" -set将包含在您的Foo响应中。
答案 2 :(得分:0)
由于我有一个名为FooSomething
的模型,因此无法正常工作。
我发现以下对我有用。
# models.py
class FooSomething(models.Model):
name = models.CharField(...)
class Bar(models.Model):
foo = models.ForeignKey(FooSomething, related_name='foosomethings')
description = models.CharField()
# serializer.py
class FooSomethingSerializer(serializers.ModelSerializer):
foosomethings = serializers.StringRelatedField(many=True)
class Meta:
model = FooSomething
fields = (
'name',
'foosomethings',
)