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:/
答案 0 :(得分:1)
这是五个月前,所以你现在可能已经得到了答案但我的谷歌搜索带我到这里开始。
所以,如果你或其他人碰巧来到这里,我发现最好的答案是:
Django admin foreign key dropdown with custom value
基本上你需要用两种方式告诉它哪个字段/字段用作下拉字符串。
答案 1 :(得分:0)
在引用类的序列化器中,添加 read_only=False
并在引用ed 类的序列化器中声明 queryset
参数。然后,您可以在下拉列表中获得外键关系的可用对象。