9

你如何在api中包含相关字段?

class Foo(models.Model):
    name = models.CharField(...)

class Bar(models.Model):
    foo = models.ForeignKey(Foo)
    description = models.CharField()

每个 Foo 都有几个与他相关的 Bar,比如图像或其他任何东西。

如何让这些 Bar 显示在 Foo 的资源中?

用tastepie 很简单,我不确定Django Rest Framework ..

4

3 回答 3

9

我让它工作了!嘘!

好的,这就是我所做的:

为 Bar 对象创建序列化程序、视图和 URL,如 Django REST 框架的快速入门文档中所述。

然后在 Foo 序列化器中我这样做了:

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

实际上它真的很简单,文档只是没有很好地展示它我会说..

于 2013-01-10T17:10:03.950 回答
8

如今,您只需将反向关系添加到fields元组即可实现此目的。

在你的情况下:

class FooSerializer(serializers.ModelSerializer):
    class Meta:
        model = Foo
        fields = (
            'name', 
            'bar_set', 
        )

现在“bar”-set 将包含在您的 Foo 响应中。

于 2016-02-09T06:32:28.473 回答
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', 
        )
于 2020-06-26T10:40:35.957 回答