繁体   English   中英

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

[英]How to save a field after commit=False with model Form in Django?

我有一个模特:

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“form”中保存了名称和描述,但是在我获得表单后需要保存的别名。 但是没有用。

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

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

默认情况下, 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文档可以告诉你更多关于它的信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM