我正在尝试创建一个ModelForm用外键更新表的表。我似乎可以正常工作,但是我希望有人可以告诉我是否有更好的方法可以做到,或者我下面的操作方式是否有问题。
ModelForm
在Author和Genres表上使用queryset是否正确?感觉我应该在Book模型上使用查询集,并将外键与那些表相关联。
Author
Genres
Book
models.py:
models.py
class Author(models.Model): name = models.CharField(max_length=200) class Genre(models.Model): name = models.CharField(max_length=200) class Book(models.Model): title = models.CharField(max_length=200) author = models.ForeignKey('Author') genre = models.ForeignKey('Genre')
forms.py:
forms.py
class BookForm(ModelForm): title = forms.CharField(max_length=200) author = forms.ModelChoiceField(queryset=Author.objects.all()) genre = forms.ModelChoiceField(queryset=Genre.objects.all()) class Meta: model = Book fields = ['title', 'author', 'genre']
views.py:
views.py
def add_book(request): if request.method == 'POST': form = BookForm(request.POST) if form.is_valid(): form.save(commit=True) return HttpResponseRedirect('/add/') else: form = BookForm()
这段代码唯一的错误是您正在覆盖模型表单的默认行为。将其更改为如下所示:
class BookForm(ModelForm): class Meta: model = Book fields = ['title', 'author', 'genre']
然后让django处理这些定义。如果需要添加标签或小部件,则可以在Meta类中定义它们:
class BookForm(ModelForm): class Meta: model = Book fields = ['title', 'author', 'genre'] labels = {'title': 'Book title', }
例如。