【问题标题】:drop down foreign key selection in Django Rest Framework在 Django Rest Framework 中下拉外键选择
【发布时间】:2016-10-13 02:03:46
【问题描述】:

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

我想在 Django Rest Framework 中使用此功能,首先用于可浏览 API,然后用于模板 HTML 渲染器。我去过nested relations in the docs,也见过this related question,但这没有意义。至少它确实让我想到,我应该看到下拉行为,就像股票 Django Forms 一样。

最终我想要一种方法让我们在创建/更新 Bar 时选择现有的 Foo 我相信我可以使用 TemplateHTMLRenderer 通过手工制作一个将表单字段更改为完整 JSON 数据的表单来做到这一点,即指向现有Foo 的新Bar,假设我在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 选项的某些表示填充选择输入?

【问题讨论】:

  • 你解决了吗?我现在被困在同一点上,毫无头绪地徘徊。你能帮忙吗?
  • @justbeingalearner 我的回答有帮助吗?

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


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

    Django admin foreign key dropdown with custom value

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

    【讨论】:

    • 此答案适用于 django admin,不适用于 Django Rest Framework UI
    猜你喜欢
    • 2018-03-17
    • 2015-03-27
    • 2017-08-15
    • 2019-07-02
    • 2016-01-09
    • 2018-05-03
    • 2021-06-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多