如何在Django中使用模型Form在commit = False之后保存字段?

时间:2012-11-18 06:29:33

标签: 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 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“形式”中保存名称&描述,但我收到表单后需要保存的别名。但是没有用。

2 个答案:

答案 0 :(得分:2)

您尝试先保存没有别名的模型。您需要先允许空白值才能执行此操作。建议的方法是使用blank

alias = models.CharField(max_length=100, blank=True)

答案 1 :(得分:2)

默认情况下,ModelForm将包含并验证模型的所有字段。如果您始终在视图中自行分配alias值,则表单中不需要alias字段,您可以将其排除在外:

class BookForm(ModelForm):

    class Meta:
        model = Book
        fields = ('name', 'description')
        # NOTE: you can also use excludes, but many consider it a bad practice

与往常一样,Django docs可以告诉您更多相关信息。