在Django管理界面显示ManyToManyField为复选框
有没有简单的方法可以在Django后台把ManyToManyField显示为复选框?谢谢!
4 个回答
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
7
这绝对是可以实现的。下面是你可以放在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)
这个代码是通过查看管理代码得出来的。
72
根据这个回答,似乎可以使用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
或radio_fields
里。因为如果设置了
raw_id_fields
或radio_fields
,formfield_overrides
就无法让你更改关系字段的控件。这是因为raw_id_fields
和radio_fields
本身就意味着使用了自定义控件。