gpt4 book ai didi

django - 我需要一个 ModelMultipleChoiceField 的 "raw id"小部件

转载 作者:行者123 更新时间:2023-12-01 05:05:03 24 4
gpt4 key购买 nike

我的一个模型有一个 多对多 field 。
我正在使用 模型MultipleChoiceField 使用表单中的默认小部件( SelectMultiple 小部件)。

问题:
这个领域有大约 5 万个选项,加载需要很长时间。

我想将小部件更改为 CharField 并输入以逗号分隔的每个 PK(如 admin raw_id_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, value, 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)

关于django - 我需要一个 ModelMultipleChoiceField 的 "raw id"小部件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29734629/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com