Django:Admin:在Admin中更改字段的小部件
我有一个布尔值的模型,如下所示:Django:Admin:在Admin中更改字段的小部件,django,django-admin,boolean,field,django-widget,Django,Django Admin,Boolean,Field,Django Widget,我有一个布尔值的模型,如下所示: class TagCat(models.Model): by_admin = models.BooleanField(default=True) 这在管理中显示为复选框 我怎么能用它作为管理中的单选按钮 此外,我如何使它始终与管理中的某个选定值 另外,当非管理员用户添加一个TagCat时,我希望默认值是相反的。这个领域应该对他隐藏起来 有人能告诉我怎么做吗?Django文档似乎没有这么详细。更新1:完成1的代码(不要忘记将选项传递到模型中的布尔字段)
class TagCat(models.Model):
by_admin = models.BooleanField(default=True)
这在管理中显示为复选框
TagCat
时,我希望默认值是相反的。这个领域应该对他隐藏起来有人能告诉我怎么做吗?Django文档似乎没有这么详细。更新1:完成1的代码(不要忘记将选项传递到模型中的布尔字段)
从main.models导入标记cat
从django.contrib导入管理
来自django导入表单
类MyTagCatAdminForm(forms.ModelForm):
类元:
型号=标记猫
小部件={
“by_admin”:forms.RadioSelect
}
Django 3.x所需的字段='uuu all_uuuuu'#
类TagCatAdmin(admin.ModelAdmin):
表单=MyTagCatAdminForm
管理站点注册(TagCat、TagCatAdmin)
单选按钮看起来丑陋且移位,但至少可以工作
BYADMIN\u选项=(
(1,“是”),
(0,“否”),
)
类别标记cat(models.Model):
by_admin=models.BooleanField(选项=BYADMIN_选项,默认值=1)
还有另一种方法可以做到这一点,那就是,如果您希望相同类型的每个字段都有相同的小部件,我会更容易。这是通过向ModelAdmin指定formfield_覆盖来完成的。例如:
class MyModelAdmin(admin.ModelAdmin):
formfield_overrides = {
models.TextField: {'widget': RichTextEditorWidget},
}
文档中的更多内容:
更新:链接到Django 2.0版本:
以下是mgPePe响应的更动态的扩展:
class MyAdminForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(MyAdminForm, self).__init__(*args, **kwargs)
self.fields['by_admin'].label = 'My new label'
self.fields['by_admin'].widget = forms.RadioSelect()
class Meta:
model = TagCat
class MyAdmin(admin.ModelAdmin):
fields = ['name', 'by_admin']
form = MyAdminForm
这样,您就可以完全控制字段。您的第一个问题在中得到了回答。我确实读过这个问题。答案似乎说明了如何在一般情况下替换它,而我只希望具体情况是无线电。最后一个答案似乎是我想要的,我尝试了,但没有成功,因为在管理中,只有标签出现。我将把我的代码粘贴为“更新1”,在最近的Django版本中,向元类添加
字段='\uuuu all\uuuu'
行似乎是必要的。如果要覆盖字段类型,请使用form\u class
;e、 g.忽略小数中的逗号:formfield_overrides={models.DecimalField:{'form_class':MyDecimalField}