Python 如何使用Django中的模型表单在commit=False之后保存字段?
我有一个模型:Python 如何使用Django中的模型表单在commit=False之后保存字段?,python,django,forms,model,Python,Django,Forms,Model,我有一个模型: class Book(models.Model): name = models.CharField(max_length=100) alias = models.CharField(max_length=100) description = models.TextField() def __unicode__(self): return self.name 以及forms.py中的ModelForm: class BookFo
class Book(models.Model):
name = models.CharField(max_length=100)
alias = models.CharField(max_length=100)
description = models.TextField()
def __unicode__(self):
return self.name
以及forms.py中的ModelForm:
class BookForm(ModelForm):
class Meta:
model = Book
因此,我试图在我的观点中做出这样的解释:
def register_book(request):
if request.method == 'POST':
formul = BookForm(request.POST)
if formul.is_valid():
new_book=formul.save(commit=False)
new_book.alias='foo'
new_book.save()
return HttpResponseRedirect('/')
因此,我正在从html“表单”中保存名称和描述,但在获取表单后需要保存别名。但是不起作用。您试图先保存没有别名的模型。您需要先允许空白值,然后才能执行此操作。建议的办法是:
默认情况下,
ModelForm
将包括并验证模型的所有字段。如果您总是在视图中自己分配别名
值,则不需要表单中的别名
字段,您只需将其排除:
class BookForm(ModelForm):
class Meta:
model = Book
fields = ('name', 'description')
# NOTE: you can also use excludes, but many consider it a bad practice
像往常一样,我可以告诉您更多信息。保存表单时返回给您的错误是什么?如果您的
if formul.is_valid():
检查,您的else
在哪里?谢谢您刚刚解决了我的表单验证问题。
class BookForm(ModelForm):
class Meta:
model = Book
fields = ('name', 'description')
# NOTE: you can also use excludes, but many consider it a bad practice