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/