3

我有一个模型:

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“表单”中保存名称和描述,但是在获取表单后我需要保存的别名。但不工作。

4

2 回答 2

3

默认情况下, AModelForm将包含并验证模型的所有字段。如果您总是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 文档可以告诉你更多关于它的信息。

于 2012-11-18T11:14:14.040 回答
2

您正在尝试先保存没有别名的模型。您需要先允许空白值,然后才能执行此操作。推荐的方法是使用blank

alias = models.CharField(max_length=100, blank=True)
于 2012-11-18T10:41:47.473 回答