Django限制ModelChoiceField的记录(选项)

f0ofjuux  于 2023-03-24  发布在  Go
关注(0)|答案(1)|浏览(121)

我有一个型号 * 阅读器 * ModelChoiceField * favorite_book*,这是一个外键。它是一个下拉菜单,用户可以从40.000个可能的选项中选择一个(数据库中的记录)。编辑此Model对象和此特定字段时出现问题,因为DropDown正在使用数据库中的所有记录填充,这会占用太多时间和内存。因此,我必须找到一种方法,以某种方式呈现这个字段与一个匹配的选项(该用户以前选择并保存在DB中)单独,而不是与成千上万的其他选项。我试过:
readerForm.fields['books'].initial = Books.objects.get(id=url)
但是initial不能处理绑定表单。
我有$. AJAX 请求,稍后将根据输入过滤这些40.000选项,以便用户可以选择一些其他选项,如果需要的话。

2g32fytz

2g32fytz1#

经过几天的挣扎,我终于遇到了this问题,它帮助我解决了这个问题。顺便说一句,我不知道为什么官方文档中缺少关于初始化表单,字段,示例,__init__()方法等的内容-我想我已经阅读了大约50个Stackoverflow问题,并没有在官方文档中找到这些问题和答案中提到的任何内容。无论如何,我定义了__ init__()方法并修改了ChoiceField如下:

class ReaderForm(forms.ModelForm):
...

def __init__(self,*args,**kwargs):
        super(ReaderForm, self).__init__(*args, **kwargs)
        self.fields['favourite_book'].choices = [(self.instance.favourite_book.id, self.instance.favourite_book.name)]

class Meta:
    model = Reader
    fields = "__all__"

相关问题