Python 在视图中将实例/默认值传递给要使用的空表单的ModelFormSet

Python 在视图中将实例/默认值传递给要使用的空表单的ModelFormSet,python,django,django-forms,Python,Django,Django Forms,如何在ModelFormSet中预填充排除字段。下面的AuthorFormSet在这里不接受实例参数,只接受queryset。那么,如何强制输入的空表单不具有NULL/Noneuser属性呢。我希望能够将该用户字段设置为request.user models.py forms.py views.py 编辑 在我看来,这就是我最终所做的。Wogan的回答部分是正确的,我认为它只是缺少了迭代所有表单的部分 for form in formset.forms: form.instance.u

如何在ModelFormSet中预填充排除字段。下面的AuthorFormSet在这里不接受实例参数,只接受queryset。那么,如何强制输入的空表单不具有NULL/Noneuser属性呢。我希望能够将该用户字段设置为request.user

models.py forms.py views.py 编辑 在我看来,这就是我最终所做的。Wogan的回答部分是正确的,我认为它只是缺少了迭代所有表单的部分

for form in formset.forms: 
    form.instance.user = request.user
formset.save()

您可以排除模型表单中的字段,然后这些字段将从
modelformset\u factory
创建的表单集中排除

class AuthorForm(forms.ModelForm):
    class Meta:
        model = Author
        exclude = ('user',)
在您的视图中,将
commit=False
传递给表单的
save()
方法,然后手动设置用户字段:

def my_view(request):
    if request.method == 'POST':
        formset = AuthorFormSet(request.POST)
        if formset.is_valid(): 
            for author in formset.save(commit=False):
                author.user = request.user
                author.save()
            formset.save_m2m() # if your model has many to many relationships you need to call this

呃,对,是这样,;让我来解决这个问题。。。
for form in formset.forms: 
    form.instance.user = request.user
formset.save()
class AuthorForm(forms.ModelForm):
    class Meta:
        model = Author
        exclude = ('user',)
def my_view(request):
    if request.method == 'POST':
        formset = AuthorFormSet(request.POST)
        if formset.is_valid(): 
            for author in formset.save(commit=False):
                author.user = request.user
                author.save()
            formset.save_m2m() # if your model has many to many relationships you need to call this