我有我认为应该是一个简单的问题。我有一个内联模型表单集,我想让一个选择字段具有当前登录用户的默认选择值。在视图中,我使用的是 Django 的 Authentication 中间件,因此获取用户是一个简单的访问request.user
.
但是,我无法弄清楚的是如何将该用户设置为包含用户列表的选择框(ModelChoiceField)中的默认选择值。谁能帮我这个?
我有我认为应该是一个简单的问题。我有一个内联模型表单集,我想让一个选择字段具有当前登录用户的默认选择值。在视图中,我使用的是 Django 的 Authentication 中间件,因此获取用户是一个简单的访问request.user
.
但是,我无法弄清楚的是如何将该用户设置为包含用户列表的选择框(ModelChoiceField)中的默认选择值。谁能帮我这个?
这可以解决问题。它通过设置所有“额外”表单的初始值来工作。
formset = MyFormset(instance=myinstance)
user = request.user
for form in formset.forms:
if 'user' not in form.initial:
form.initial['user'] = user.pk
我不确定如何在内联表单集中处理这个问题,但以下方法适用于普通表单和模型表单:
您不能将其设置为模型定义的一部分,但您可以在表单初始化期间进行设置:
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)
我在上面使用 Rune Kaagaard 的想法,除了我注意到表单集提供了一个 extra_forms 属性:django.forms.formsets 代码
@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
无需测试任何初始表单,只需为额外表单提供默认值。