gpt4 book ai didi

python - 如何修改 ModelMultipleChoiceField 的选项

转载 作者:太空狗 更新时间:2023-10-30 00:27:13 25 4
gpt4 key购买 nike

假设我有一些人为设计的模型:

class Author(Model):
name = CharField()

class Book(Model):
title = CharField()
author = ForeignKey(Author)

假设我想为 Book 使用 ModelForm:

   class BookForm(ModelForm):
class Meta:
model = Book

到目前为止很简单。但我们还要说我的数据库中有大量作者,我不想有这么长的多项选择字段。所以,我想限制 BookForm 的 ModelMultipleChoiceField 作者字段上的查询集。我们还假设直到 __init__ 才能选择我想要的查询集,因为它依赖于要传递的参数。

这似乎可以解决问题:

class BookForm(ModelForm):
class Meta:
model = Book

def __init__(self, letter):
# returns the queryset based on the letter
choices = getChoices(letter)
self.author.queryset = choices

当然,如果那行得通,我就不会在这里了。这让我得到一个 AttributeError。 'BookForm' 对象没有属性 'author'。因此,我也尝试了类似的方法,我尝试覆盖 ModelForm 的默认字段,然后稍后进行设置:

class BookForm(ModelForm):
author = ModelMultipleChoiceField(queryset=Author.objects.all())

class Meta:
model = Book

def __init__(self, letter):
choices = getChoices(letter)
self.author.queryset = choices

产生相同的结果。

有人知道这是如何实现的吗?

最佳答案

尽管 Carl 对这些字段的看法是正确的,但您还缺少父类(super class)调用。我是这样做的:

class BookForm(ModelForm):
author = ModelMultipleChoiceField(queryset=Author.objects.all())

class Meta:
model = Book

def __init__(self, *args, **kwargs):
letter = kwargs.pop('letter')
super(BookForm, self).__init__(*args, **kwargs)
choices = getChoices(letter)
self.fields['author'].queryset = choices

关于python - 如何修改 ModelMultipleChoiceField 的选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/738301/

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