3

私はモデルを持っています:

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

2 に答える 2

3

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 のドキュメントで詳細を説明しています。

于 2012-11-18T11:14:14.040 に答える
2

最初にエイリアスなしでモデルを保存しようとしています。それを行う前に、空白の値を許可する必要があります。推奨されるアプローチは、次を使用することblankです。

alias = models.CharField(max_length=100, blank=True)
于 2012-11-18T10:41:47.473 に答える