指定django隐藏表单字段的默认值 - bone DRY?

jMy*_*les 4 django dry django-forms django-queryset

所以,让我们说在最后一刻(在视图中)我决定要为字段指定默认值并使其隐藏,如下所示:

form.fields['coconut'] = forms.ModelChoiceField(label="", widget=forms.HiddenInput(), queryset=swallow.coconuts.all(), initial=some_particular_coconut)
Run Code Online (Sandbox Code Playgroud)

我的问题是:我真的需要在这里指定queryset吗?我的意思是,从最初开始,我已经知道我正在谈论的椰子.为什么我还需要指定可用椰子的世界是这个特定的燕子携带的椰子(由稻壳)?

有没有办法可以避免指定查询集?简单地省略导致django引发TypeError.

如果确实需要,这不是有点潮湿吗?

Gui*_*eba 9

我认为stackoverflow的回答指向"正确"的做事方式是好的,但是越来越多的原始问题没有回答,因为用户试图做错事.所以要直接回答这个问题,这就是你能做的:

form.fields['coconut'] = forms.ModelChoiceField(label="", widget=forms.HiddenInput(attrs={'value':some_particular_coconut}), queryset=swallow.coconuts.all())
Run Code Online (Sandbox Code Playgroud)

注意命名参数传递给HiddenInput,它的超级hackish但它直接回答了原始问题.


Rob*_*ert 2

问题是您正在尝试设置隐藏的 ModelChoiceField。为了有一个选择(传统上是下拉菜单),它需要知道它的选择 - 这就是你给出查询集的原因。

但你并不想给用户选择,对吧?这是一个隐藏的输入,您正在从服务器设置它(因此它可能会被发布回来)。

我的建议是尝试找到一种完全使用隐藏输入的方法。我觉得它们有点老套。但除此之外,为什么不直接用 指定一个文本字段some_particular_coconut.id,然后隐藏它呢?无论如何,该模型仅包装该 id。