首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Django: Admin:在Admin中更改字段的小部件

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

Stack Overflow用户
提问于 2010-12-03 00:29:28
回答 3查看 37.9K关注 0票数 34

我有一个布尔值如下的模型:

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

这在管理中显示为一个复选框。

  1. 如何将其用作管理中的单选按钮?
  2. 另外,如何使其始终具有管理中的某个选定值?
  3. 另外,当非管理员用户添加TagCat时,我希望默认值与之相反。此字段应对他隐藏。

有人能告诉我怎么做吗?Django文档似乎没有这么详细。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-12-03 01:32:39

更新1:让我完成1的代码)(不要忘记将选择传递给模型中的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
        }
        fields = '__all__' # required for Django 3.x
    
class TagCatAdmin(admin.ModelAdmin):
    form = MyTagCatAdminForm


admin.site.register(TagCat, TagCatAdmin)

单选按钮看起来丑陋而错位,但至少它们还能用。

我用MyModel.py中的以下信息解决了

BYADMIN_CHOICES = (
    (1, "Yes"),
    (0, "No"),
)

class TagCat(models.Model):
    by_admin = models.BooleanField(choices=BYADMIN_CHOICES,default=1)
票数 51
EN

Stack Overflow用户

发布于 2012-10-29 04:08:44

有另一种方法可以做到这一点,那就是,如果您希望相同类型的每个字段都具有相同的小部件,则IMO要容易得多。这是通过指定ModelAdmin的formfield_overrides来完成的。例如:

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

文档中有更多内容:https://docs.djangoproject.com/en/1.4/ref/contrib/admin/#django.contrib.admin.ModelAdmin.formfield_overrides

更新: Django 2.0版本链接:https://docs.djangoproject.com/en/2.0/ref/contrib/admin/#django.contrib.admin.ModelAdmin.formfield_overrides

票数 45
EN

Stack Overflow用户

发布于 2013-07-01 20:48:11

下面是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

这样你就可以完全控制这些领域了。

票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4337304

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档