9

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

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

4

3 回答 3

6

这可以解决问题。它通过设置所有“额外”表单的初始值来工作。

formset = MyFormset(instance=myinstance)
user = request.user
for form in formset.forms:
    if 'user' not in form.initial:
        form.initial['user'] = user.pk
于 2011-11-22T08:25:00.860 回答
5

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

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

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)
于 2009-09-30T21:32:18.533 回答
0

我在上面使用 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

无需测试任何初始表单,只需为额外表单提供默认值。

于 2015-06-28T13:11:48.943 回答