そのようなブール値を持つモデルがあります:
class TagCat(models.Model):
by_admin = models.BooleanField(default=True)
これは管理者のチェックボックスとして表示されます。
TagCat
を追加する場合は、デフォルト値を反対にしたいと思います。このフィールドは彼から隠されるべきです。誰かがこれを行う方法を教えてもらえますか? Djangoドキュメンテーションはそのような詳細に行っていないようです。
更新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)
ラジオボタンは見苦しく、ずれて表示されますが、少なくとも機能します
2)MyModel.pyの次の情報で解決しました:
BYADMIN_CHOICES = (
(1, "Yes"),
(0, "No"),
)
class TagCat(models.Model):
by_admin = models.BooleanField(choices=BYADMIN_CHOICES,default=1)
これを行う別の方法があります。つまり、同じ型のすべてのフィールドに同じウィジェットを持たせたい場合は、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
以下は、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
このようにして、フィールドを完全に制御できます。