我在 Models
中定义了一个Django Form类:
class AccountDetailsForm(forms.Form):
...
adminuser = forms.ModelChoiceField(queryset=User.objects.all())
这工作正常,但它有一些限制我似乎无法解决:
(1)我想在查询集上使用过滤器,基于传递给表单的变量 accountid
,如下所示:
User.objects.filter(account=accountid)
这在模型中不起作用,因为 accountid
当然不能作为变量传递 .
因此, queryset
必须以某种方式在 Views
中定义,但据我所知,它是Form类中的必填字段 .
(2)我想在数据库中默认选择 AccountDetailsForm
一个对象,我可以在_2778150中选择,如下所示:
User.objects.filter(account=accountid).filter(primary_user=1)
我已经尝试将adminuser指定为表单中的默认值(适用于其他标准表单字段,如 CharField
):
adminuser = User.objects.filter(account=accountid).filter(primary_user=1)
...
form = AccountDetailsForm({'adminuser': adminuser})
return render_to_response('accounts/edit/accountdetails.html',
{'form': form, 'account':account})
但没有运气 .
鉴于我在这里需要的灵活性,我应该使用除_2778154之外的其他东西吗?
谢谢 .
3 回答
覆盖init方法并接受新的关键字参数
您也可以随时在视图中手动设置选项 .
请注意:您没有通过将字典传递到示例中的表单来设置默认值 .
您实际上正在创建一个绑定表单,可能会触发验证和所有爵士乐 .
要设置默认值,use the initials argument.
您可以覆盖视图中的字段
在Django 2.0中,您可以将对象(在您的情况下为
User
)从view
传递到form
(您必须先从数据库中检索obj):它将为您提供默认选定对象(回答您的2)问题)