Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用Django中的模型表单在commit=False之后保存字段?_Python_Django_Forms_Model - Fatal编程技术网

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