我的一个模特有一个 ManyToMany 字段。 我在表单中使用 ModelMultipleChoiceField 和默认小部件( SelectMultiple 小部件)。
问题: 这个领域有大约5万个选项,而且需要很长时间才能加载。
我想将小部件更改为CharField并输入用逗号分隔的每个PK(如admin raw_id_field)。
问题: 这样做的最佳方法是什么?有人已经为此做了一个小部件吗? Shoul我创建自己的Widget或Field?
谢谢!
答案 0 :(得分:1)
如果您不需要在单独的窗口中选择项目,例如在管理员中,那么编写此类窗口小部件非常简单。使用以下小部件,您将能够输入以逗号分隔的pks列表:
class MyForm(forms.Form):
users = forms.ModelMultipleChoiceField(queryset=User.objects.all(), widget=ModelMultiRawInput)
您通常会使用此小部件:
LRESULT CALLBACK winproc(HWND hwnd, UINT wm, WPARAM wp, LPARAM lp)
{
...
case WM_SIZE:
int width = LOWORD(lp);
int height = LOWORD(wp);
break;
return DefWindowProc(hwnd, wm, wp, lp);
}
答案 1 :(得分:0)
您是否尝试过ManyToManyRawIdWidget
?
https://github.com/django/django/blob/master/django/contrib/admin/widgets.py#L205
免责声明:我自己没有尝试过,在挖掘过程中遇到过它 通过源代码获取其他内容。