下载Django Rest Framework中的外键选择

时间:2016-06-12 16:13:55

标签: python django rest foreign-keys django-rest-framework

Bar对于Foo来说是ForeignKey,很多只有一个Foo。在Django中使用表单foreign key defaults to a select list input

我想在Django Rest Framework中使用此功能,首先是Browsable API,然后是Template HTML Renderer。我已经结束了nested relations in the docs并且也见过this related question,但它没有意义。至少它确实让我想到,我应该看到下拉行为就像股票Django Forms一样。

最终我想要一种让我们在创建/更新Bar时选择现有Foo的方法我相信我可以通过手工制作一个将表单字段更改为完整JSON数据的表单来使用TemplateHTMLRenderer,假设我在Bar上编写更新和创建方法,即指向现有Foo的新Bar。但这听起来像我在某处错过了“简单的方法”。

class BarSerializer(serializers.ModelSerializer):

    # This shows Foo.foo within serialzied Bar JSON:
    # I suspect I am missing something with the relation that would allow me to select foo from a list
    foo = serializers.SlugRelatedField(many=False, read_only=True,slug_field="foo")


    class Meta:
           model = Bar
           fields = ('foo','some_value','another_value')


class FooSerializer(serializers.ModelSerializer):
    owner = serializers.ReadOnlyField(source='owner.username')

    # This shows the Bar serialized within the Foo JSON i.e. nested serialization
    bars =  BarSerializer(many=True);

    # reverse rel: related_name='bars' in Foo model
    class Meta:
        model = Foo
        # 'bars' is the related name pointing from bar to foo
        fields = ('bars', 'foo', 'owner')  

我理解为了保存嵌套数据,我的序列化程序需要更新和创建。现在实现这一点。但是我无法理解,如果让DRF用一些Foo选项表示填充选择输入,我该怎么做?

我遗漏了一些明显的是吗?这里是RTFM(再次)downvotes:/

2 个答案:

答案 0 :(得分:1)

这是五个月前,所以你现在可能已经得到了答案但我的谷歌搜索带我到这里开始。

所以,如果你或其他人碰巧来到这里,我发现最好的答案是:

Django admin foreign key dropdown with custom value

基本上你需要用两种方式告诉它哪个字段/字段用作下拉字符串。

答案 1 :(得分:0)

在引用类的序列化器中,添加 read_only=False 并在引用ed 类的序列化器中声明 queryset 参数。然后,您可以在下拉列表中获得外键关系的可用对象。