Django:admin:在Admin中更改字段的小部件

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (21)

我有一个类似布尔值的模型:

class TagCat(models.Model):
    by_admin = models.BooleanField(default=True) 

这显示为管理员中的复选框。

  1. 我怎么能用这个作为管理员的单选按钮?
  2. 另外,我如何使它始终与管理中的某个选定的值?
  3. 另外,我希望默认值是相反的,当一个非管理员用户添加一个TagCat。该字段应该隐藏起来。

有人能告诉我如何做到这一点?Django文档似乎没有详细说明。

提问于
用户回答回答于

(不要忘记将选项传递给模型中的BooleanField)

from main.models import TagCat
from django.contrib import admin
from django import forms

class MyTagCatAdminForm(forms.ModelForm):
    class Meta:
        model = TagCat
        widgets = {
          'by_admin':forms.RadioSelect
        }

class TagCatAdmin(admin.ModelAdmin):
    form = MyTagCatAdminForm


admin.site.register(TagCat, TagCatAdmin)

单选按钮看上去很难看,也有错位,但至少它们能工作。

2)我用MyModel.py中的以下信息解决了问题:

BYADMIN_CHOICES = (
    (1, "Yes"),
    (0, "No"),
)
class TagCat(models.Model):
    by_admin = models.BooleanField(choices=BYADMIN_CHOICES,default=1)
用户回答回答于

还有一种方法可以实现这一点,即,如果你希望相同类型的每个字段都具有相同的小部件,则IMO要容易得多。这是通过指定一个Forfield来完成的。例如:

class MyModelAdmin(admin.ModelAdmin):
    formfield_overrides = {
        models.TextField: {'widget': RichTextEditorWidget},
    }

扫码关注云+社区