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