有没有一种简单的方法可以在 Django Admin 中将 ManyToManyField 显示为复选框?提前致谢!
问问题
17347 次
4 回答
67
从这个答案看来,可以使用ModelAdmin.formfield_overrides覆盖 ManyToManyField 以使用CheckBoxSelectMultiple:
from django.db import models
from django.contrib import admin
from django.forms import CheckboxSelectMultiple
class MyModelAdmin(admin.ModelAdmin):
formfield_overrides = {
models.ManyToManyField: {'widget': CheckboxSelectMultiple},
}
我没有尝试过,只是从源头引用,但这似乎是合理的。祝你好运。
如果您想将自定义小部件 与关系字段(即
ForeignKey
ManyToManyField )一起使用,请确保您没有在raw_id_fields
or中包含该字段的名称radio_fields
。
formfield_overrides
不会让您更改已设置raw_id_fields
或 已radio_fields
设置的关系字段上的小部件。那是因为raw_id_fields
并radio_fields
暗示了他们自己的自定义小部件。
于 2011-01-24T16:57:48.343 回答
6
这当然是可能的。这是您可以放在ModelAdmin
子类中的代码:
def formfield_for_manytomany(self, db_field, request=None, **kwargs):
if db_field.name == 'your field name':
kwargs['widget'] = form_widgets.CheckboxSelectMultiple()
kwargs['help_text'] = ''
return db_field.formfield(**kwargs)
这是通过查看管理代码得出的。
于 2011-06-30T12:48:57.360 回答
5
要覆盖单个字段,以下内容很有用:
def get_form(self, request, obj=None, **kwargs):
form = super(VNodeAdmin, self).get_form(request, obj, **kwargs)
form.base_fields['node_type'].widget = forms.CheckboxSelectMultiple()
return form
于 2014-01-07T16:04:34.490 回答
0
我认为没有简单的方法可以做到这一点。您可以尝试覆盖 ModelAdmin 类,但这不是一种“简单”的方式。
但是您可以使用 filter_horizontal 或 filter_vertical 添加几乎相似的功能
于 2011-01-24T17:01:32.737 回答