我有一个布尔值如下的模型:
class TagCat(models.Model):
by_admin = models.BooleanField(default=True)
这在管理中显示为一个复选框。
TagCat
时,我希望默认值与之相反。此字段应对他隐藏。有人能告诉我怎么做吗?Django文档似乎没有这么详细。
发布于 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)
发布于 2012-10-29 04:08:44
有另一种方法可以做到这一点,那就是,如果您希望相同类型的每个字段都具有相同的小部件,则IMO要容易得多。这是通过指定ModelAdmin的formfield_overrides来完成的。例如:
class MyModelAdmin(admin.ModelAdmin):
formfield_overrides = {
models.TextField: {'widget': RichTextEditorWidget},
}
更新: Django 2.0版本链接:https://docs.djangoproject.com/en/2.0/ref/contrib/admin/#django.contrib.admin.ModelAdmin.formfield_overrides
发布于 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
这样你就可以完全控制这些领域了。
https://stackoverflow.com/questions/4337304
复制相似问题