Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django:如何为内联模型表单集中的字段设置初始值?_Python_Django_Default Value_Django Forms - Fatal编程技术网

Python Django:如何为内联模型表单集中的字段设置初始值?

Python Django:如何为内联模型表单集中的字段设置初始值?,python,django,default-value,django-forms,Python,Django,Default Value,Django Forms,我有一个我认为应该很简单的问题。我有一个内联模型表单集,我想让一个选择字段具有当前登录用户的默认选择值。在视图中,我使用的是Django的身份验证中间件,因此获取用户只需访问request.user 但是,我还没有弄清楚的是,如何在包含用户列表的选择框(ModelChoiceField)中将该用户设置为默认的选定值。有人能帮我吗 我不确定如何在内联表单集中处理此问题,但以下方法适用于普通表单和模型表单: 不能将其设置为模型定义的一部分,但可以在表单初始化期间进行设置: def __init__(

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


但是,我还没有弄清楚的是,如何在包含用户列表的选择框(ModelChoiceField)中将该用户设置为默认的选定值。有人能帮我吗

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

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

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的想法,只是我注意到表单集提供了一个额外的表单属性:

因此,坚持上面的例子:

formset = MyFormset(instance=myinstance)
user = request.user
for form in formset.extra_forms:
    form.initial['user'] = user.pk

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

不确定如何使用内联表单集。我正在使用inlineformset\u工厂创建我的表单集,并将其传递给表单类,而不是实例。所以我没有在任何地方直接实例化表单对象,也不知道如何传递构造函数参数。。。我相信ModelForms将采用“默认”值,不是吗?正如您所示,标准表单字段使用的是initial,但据我所知,没有理由使用super()。这太棒了!我一直在寻找一种将数据从表单发送到视图的方法,这样我就可以发送将使用messages框架显示的状态。在表单中,我使用了初始关键字,然后在视图中,我对validate:cur\u key\u status=form.cleaned\u data['key\u status']messages.success(请求,cur\u key\u status)执行了此操作
formset = MyFormset(instance=myinstance)
user = request.user
for form in formset.forms:
    if 'user' not in form.initial:
        form.initial['user'] = user.pk
formset = MyFormset(instance=myinstance)
user = request.user
for form in formset.extra_forms:
    form.initial['user'] = user.pk