我正在尝试创建一个用外键更新表的ModelForm。我所拥有的似乎是有用的,但我希望有人能告诉我,是否有更好的方法来做这件事,或者我在下面做的方式是否有问题。
在Author和Genres表上使用查询集正确吗?我觉得我应该在Book模型上使用一个查询集,并将外键与这些表关联起来。
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
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
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()发布于 2014-01-16 14:50:04
这段代码唯一错误的地方是,您正在重写模型表单的默认行为。将其更改为:
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', }例如。
发布于 2014-01-16 14:48:35
我不太清楚你在这里问的是什么,或者你为什么要在书上设置一个查询集。
实际上,您还没有更改任何字段的默认值,因此没有必要重新定义它们:您的表单可能很简单
class BookForm(ModelForm):
class Meta:
model = Book它的工作原理是完全一样的。
https://stackoverflow.com/questions/21164798
复制相似问题