加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

django – 我需要一个ModelMultipleChoiceField的“原始id”小部

发布时间:2020-12-20 13:48:41 所属栏目:Python 来源:网络整理
导读:我的一个模型有一个ManyToMany字段. 我在表单中使用ModelMultipleChoiceField和默认小部件(SelectMultiple小部件). 问题: 这个领域有大约5万个选项,需要花费很长时间才能加载. 我想将小部件更改为CharField并输入用逗号分隔的每个PK(如admin raw_id_field).
我的一个模型有一个ManyToMany字段.
我在表单中使用ModelMultipleChoiceField和默认小部件(SelectMultiple小部件).

问题:
这个领域有大约5万个选项,需要花费很长时间才能加载.

我想将小部件更改为CharField并输入用逗号分隔的每个PK(如admin raw_id_field).

问题:
这样做的最佳方法是什么?有人已经为此做了一个小部件吗?
Shoul我创建自己的Widget或Field?

谢谢!

解决方法

如果你不需要在单独的窗口中选择项目,比如在admin中,那么编写这样的小部件非常简单.使用以下小部件,您将能够输入以逗号分隔的pks列表:

from django import forms
from django.utils.encoding import force_text

class ModelMultiRawInput(forms.TextInput):
    def render(self,name,value,attrs=None):
        if value:
            value = ','.join([force_text(v) for v in value])
        else:
            value = ''
        return super(ModelMultiRawInput,self).render(name,attrs)

    def value_from_datadict(self,data,files,name):
        value = data.get(name)
        if value:
            return value.split(',')

你通常会像这样使用这个小部件:

class MyForm(forms.Form):
    users = forms.ModelMultipleChoiceField(queryset=User.objects.all(),widget=ModelMultiRawInput)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读