如何保存现场后提交=假,在Django的模型形式?(How to save a field afte

2019-08-02 21:45发布

我有一个模型:

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“形式”的名称和描述保存,但别名我需要保存后,我得到的形式。 但是,不能正常工作。

Answer 1:

一个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文档可以告诉你更多。



Answer 2:

你想先保存模型没有一个别名。 您需要允许空值,然后才能做到这一点。 推荐的方法是使用blank

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


文章来源: How to save a field after commit=False with model Form in Django?