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)
方法。这将为查询集设置正确的初始值和选择值。