Django:如何为内联模型formset中的字段设置初始值?

时间:2009-09-30 19:15:54

标签: python django default-value django-forms

我认为应该是一个简单的问题。我有一个内联模型formset,我想让一个select字段具有当前登录用户的默认选择值。在视图中,我使用的是Django的身份验证中间件,因此获取用户只需访问request.user即可。

但是,我无法弄清楚如何将该用户设置为包含用户列表的选择框(ModelChoiceField)中的默认选定值。谁能帮我这个?

3 个答案:

答案 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

保存必须测试任何初始表单,只提供额外表单的默认值。

相关问题