2012-11-18 45 views
3

我有一个模型:如何使用Django中的模型Form在commit = False之后保存字段?

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

在保存表单的同时返回什么错误? –

+0

如果formul.is_valid():'check',你的'else'在哪里? –

回答

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

2

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

alias = models.CharField(max_length=100, blank=True) 
相关问题