我认为应该是一个简单的问题。我有一个内联模型formset,我想让一个select字段具有当前登录用户的默认选择值。在视图中,我使用的是Django的身份验证中间件,因此获取用户只需访问request.user
即可。
但是,我无法弄清楚如何将该用户设置为包含用户列表的选择框(ModelChoiceField)中的默认选定值。谁能帮我这个?
答案 0 :(得分:4)
我不确定如何在内联表单集中处理此问题,但以下方法适用于普通表单和ModelForms:
您不能将其设置为模型定义的一部分,但您可以在表单初始化期间设置它:
def __init__(self, logged_in_user, *args, **kwargs):
super(self.__class__, self).__init__(*args, **kwargs)
self.fields['my_user_field'].initial = logged_in_user
...
form = MyForm(request.user)
答案 1 :(得分:4)
这就是诀窍。它的工作原理是设置所有“额外”形式的初始值。
formset = MyFormset(instance=myinstance)
user = request.user
for form in formset.forms:
if 'user' not in form.initial:
form.initial['user'] = user.pk
答案 2 :(得分:0)
我上面使用了Rune Kaagaard的想法,除了我注意到formset提供了extra_forms属性:django.forms.formsets code
@property
def extra_forms(self):
"""Return a list of all the extra forms in this formset."""
return self.forms[self.initial_form_count():]
所以,坚持上面的例子:
formset = MyFormset(instance=myinstance)
user = request.user
for form in formset.extra_forms:
form.initial['user'] = user.pk
保存必须测试任何初始表单,只提供额外表单的默认值。