下载Django Rest Framework中的外键选择

Ric*_*ick 6 python django rest foreign-keys django-rest-framework

Bar有一个ForeignKey to Foo,很多Bar到一个Foo.在Django中使用Forms,外键默认为选择列表输入.

我想在Django Rest Framework中使用此功能,首先是Browsable API,然后是Template HTML Renderer.我一直在文档中嵌套关系, 也见过这个相关的问题,但它没有意义.至少它确实让我想到,我应该看到下拉行为就像股票Django Forms一样.

最终我想要一种让我们在创建/更新Bar时选择现有Foo的方法我相信我可以用TemplateHTMLRenderer手工制作一个将表单字段更改为完整JSON数据的表单,即指向现有的新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')  
Run Code Online (Sandbox Code Playgroud)

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

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

小智 -2

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

因此,如果您或其他人碰巧来到这里,我发现最有效的答案是:

具有自定义值的 Django 管理外键下拉列表

基本上,您需要以两种方式之一告诉它哪个字段或多个字段用作下拉列表的字符串。

  • 这个答案适用于 django admin,不适用于 Django Rest Framework UI (3认同)