python - 在 Django Rest Framework 中下拉外键选择

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

Bar 有 Foo 的 ForeignKey,许多 Bar 有一个 Foo。在 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 我相信我可以通过手工制作一个将表单字段更改为完整 JSON 数据的表单来使用 TemplateHTMLRenderer 来做到这一点,即一个指向现有 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 选项的某种表示形式填充选择输入?

最佳答案

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

关于python - 在 Django Rest Framework 中下拉外键选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37776435/

相关文章:

python - 找到匹配的字符串并打印后面的单词

python - 如何将元素推送到 MongoDB 中的现有数组?

python - 导入 SciPy 不起作用

python - 在多个列表中查找共同值

python - 如何为 django 模板格式化数据?

django - Pycharm错误: Improperly configured

php - YII 在 REST GET 请求中获取请求体

java - .NET 控制台应用程序客户端和 Java RESTful 服务之间的 TLS 客户端身份验证

django - 更改 url 中的一个查询参数 (Django)

java - 如何使用 java/Spring/rest 将 post json 对象数据传递到 api