ModelChoiceField 的 Django 限制记录(选项)

问题描述 投票:0回答:1

我有一个模型 Reader

ModelChoiceField
favourite_book 这是一个外键。这是一个下拉菜单,用户可以从 40.000 个可能的选项(数据库中的记录)中选择一个。 编辑此 Model 对象和此特定字段时出现问题,因为 DropDown 正在填充数据库中的所有记录,这会占用太多时间和内存。因此,我必须找到一种方法,以某种方式单独使用匹配选项(该用户之前选择并保存在数据库中)而不是使用数千个其他选项来呈现该字段。我试过:

readerForm.fields['books'].initial = Books.objects.get(id=url)

但是

initial
不适用于绑定表格。

我有 $.ajax 请求,稍后将根据输入过滤这 40.000 个选项,以便用户可以根据需要选择其他选项。

django dropdown modelchoicefield
1个回答
0
投票

经过几天的努力,我终于遇到了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__" 
© www.soinside.com 2019 - 2024. All rights reserved.