2012-11-18 86 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) 
相關問題