gpt4 book ai didi

python - 带外键的 Django ModelForm

转载 作者:太空宇宙 更新时间:2023-11-04 10:40:05 24 4
gpt4 key购买 nike

我正在尝试创建一个使用外键更新表的 ModelForm。我所做的似乎有效,但我希望有人能告诉我是否有更好的方法来执行此操作,或者我在下面执行此操作的方法是否存在问题。

AuthorGenres 表上使用查询集是否正确?感觉我应该在 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()

最佳答案

此代码唯一的错误是您覆盖了模型表单的默认行为。将其更改为:

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', }

例如。

关于python - 带外键的 Django ModelForm,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21164798/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com