3

私はこれにかなり慣れていないので、我慢してください。modelformset_factoryBook モデルでフォームを作成するために使用する「Edit Book」フォームを作成しました。モデルからデータをフォームにロードして保存しようとすると、フォーム内のデータを変更するかどうかに関係なく、is_valid()常に False が返されます。

コード:

models.py

class Book(models.Model):

    def __unicode__(self):
        return self.title

    user = models.ForeignKey(User)
    title = models.CharField(max_length=300)
    author = models.CharField(max_length=200)
    description = models.TextField(blank=True)
    pub_date = models.DateField(blank=True, null=True)
    link = models.URLField(blank=True, null=True)
    category = models.CharField(max_length=2, choices=CATEGORY_CHOICES)
    rating = models.IntegerField(blank=True, null=True, default=0)
    date_added = models.DateField(auto_now_add=True)
    date_reading = models.DateField(blank=True, null=True)
    date_read = models.DateField(blank=True, null=True)
    notes = models.TextField(blank=True, null=True)
    reading = models.BooleanField(default=False)
    book_read = models.BooleanField(default=False)

ビュー.py

from django.forms.models import modelformset_factory
from models import Book

def edit_book(request, book_id):
    BookFormSet = modelformset_factory(Book, exclude=('user', 'date_reading', 'date_read', 'reading', 'book_read'), max_num=1)
    if request.method == 'POST':
        formset = BookFormSet(queryset=Book.objects.filter(pk=book_id))
        if formset.is_valid():
            formset.save()

            return redirect('/books/' + str(book_id))
        else:
            formset = BookFormSet(queryset=Book.objects.filter(pk=book_id))
            return render(request, 'books/edit.html', {'formset':formset})

その他の注意事項:

formset.is_bound は Falseを返します
formset.errors は [] を返します
formset.non_form_errors() は何も返しません
formset.has_changed() は True を返します

4

0 に答える 0