Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django 使用ModelMultipleEchoiceField的queryset中的值_Django_Django Forms - Fatal编程技术网

Django 使用ModelMultipleEchoiceField的queryset中的值

Django 使用ModelMultipleEchoiceField的queryset中的值,django,django-forms,Django,Django Forms,我有这样一个模型: class CustomModelMultipleChiceField(forms.modelMultipleChiceField): def标签来自_实例(self,obj): 返回obj.get\u允许的\u用户名 类AddUserTopPrivateCourseForm(forms.ModelForm): users=custommodelmultipechoicefield(queryset=None) 类元: 模型=课程 字段=[ “用户”, ] 定义初始化(sel

我有这样一个模型:

class CustomModelMultipleChiceField(forms.modelMultipleChiceField):
def标签来自_实例(self,obj):
返回obj.get\u允许的\u用户名
类AddUserTopPrivateCourseForm(forms.ModelForm):
users=custommodelmultipechoicefield(queryset=None)
类元:
模型=课程
字段=[
“用户”,
]
定义初始化(self,*args,**kwargs):
super()
self.fields['users'].queryset=User.objects.all()
模型中的方法
get\u allowed\u user\u name

def get_allowed_user_name(self):
返回“{}{}-{}”。格式(self.firstname、self.lastname、self.mobile)
以及以下观点:

class AddUserTopPrivateCourseFormView(CustomUpdateView):
模型=课程
form_class=AddUserTopPrivateCourseForm
template\u name='add\u user\u to\u private\u course.html'
该数据库有大约6万用户,加载此页面非常长,大约需要半分钟 所以我想用
.values()
并获取表单所需的内容,而不是从db中捕获所有内容 所以如果我使用

User.objects.values\u列表('firstname','lastname','mobile','id')
分别从_实例更改
标签_
它工作正常,捕获并生成我需要的内容,但问题是它无法显示 已选择的用户,仅显示所有用户的列表以生成选项
正确吗?

您使用的是
课程的模型表单,是否使用要编辑的
课程
实例初始化表单?然后,这将自动为您的字段设置正确的初始值。注意:我建议使用类似的方法,为这种类型的选择提供更好的界面(通过一次加载所有用户从60k用户中进行选择似乎不是正确的方法)并且只允许您根据某人开始键入的内容使用筛选器进行查询。yes和self.initial在init method中有相应的用户否,您不应该使用
initial
,您应该使用
instance
form=AddUserToPrivateCourseForm(instance=my\u-course)
。在init方法中初始化表单后设置
self.initial
,则不会起任何作用。到那时,字段的初始值已经设置好,因此您只能通过执行
self.fields['some_field'].initial=…
来更改它们。但如果您使用正确的实例初始化表单,则不需要这样做。在
CustomModelMultipleChiceField
上,添加
def prepare_值(self,value):if isinstance(value,dict):return value['id']否则:return super()。prepare_值(value)
方法。这将为查询集设置正确的初始值和选择值。