代码之家  ›  专栏  ›  技术社区  ›  Jeff

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

  •  7
  • Jeff  · 技术社区  · 16 年前

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

    3 回复  |  直到 16 年前
        1
  •  5
  •   mherren    16 年前

    我不确定如何在内联表单集中处理此问题,但以下方法适用于普通表单和模型表单:

    不能将其设置为模型定义的一部分,但可以在窗体初始化期间进行设置:

    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)
    
        2
  •  5
  •   Rune Kaagaard    14 年前

    这就成功了。它通过设置所有“额外”窗体的初始值来工作。

    formset = MyFormset(instance=myinstance)
    user = request.user
    for form in formset.forms:
        if 'user' not in form.initial:
            form.initial['user'] = user.pk
    
        3
  •  0
  •   Chris McGinlay    10 年前

    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