我需要一个"原始ID" ModelMultipleChoiceField的小部件

时间:2015-04-19 19:17:17

标签: django django-forms django-admin

我的一个模特有一个 ManyToMany 字段。 我在表单中使用 ModelMultipleChoiceField 和默认小部件( SelectMultiple 小部件)。

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

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

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

谢谢!

2 个答案:

答案 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

  

免责声明:我自己没有尝试过,在挖掘过程中遇到过它   通过源代码获取其他内容。