mgP*_*ePe 23 django boolean field django-admin django-widget
我有一个类似于布尔值的模型:
class TagCat(models.Model):
by_admin = models.BooleanField(default=True)
Run Code Online (Sandbox Code Playgroud)
这在admin中显示为一个复选框.
TagCat.这个字段应该对他隐藏.谁能告诉我怎么做?Django文档似乎没有详细说明.
jos*_*tme 35
还有另一种方法可以做到这一点,如果您希望相同类型的每个字段都具有相同的小部件,则IMO会更容易.这是通过为ModelAdmin指定formfield_overrides来完成的.例如:
class MyModelAdmin(admin.ModelAdmin):
formfield_overrides = {
models.TextField: {'widget': RichTextEditorWidget},
}
Run Code Online (Sandbox Code Playgroud)
更多文档: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
mgP*_*ePe 34
更新1:让我完成的代码1)(不要忘记将CHOICES传递给模型中的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)
Run Code Online (Sandbox Code Playgroud)
单选按钮看起来很丑陋而且流离失所,但至少它们有效
2)我在MyModel.py中解决了以下信息:
BYADMIN_CHOICES = (
(1, "Yes"),
(0, "No"),
)
class TagCat(models.Model):
by_admin = models.BooleanField(choices=BYADMIN_CHOICES,default=1)
Run Code Online (Sandbox Code Playgroud)
Ric*_*son 10
这是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
Run Code Online (Sandbox Code Playgroud)
这样您就可以完全控制字段.
| 归档时间: |
|
| 查看次数: |
27963 次 |
| 最近记录: |