34

次のようなブール値を持つモデルがあります。

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

これは、管理者のチェックボックスとして表示されます。

  1. これを管理者のラジオボタンとして使用するにはどうすればよいですか?
  2. また、adminで特定の選択された値を常に使用するようにするにはどうすればよいですか?
  3. また、管理者以外のユーザーがを追加する場合、デフォルト値を逆にしたいと思いますTagCat。このフィールドは彼から隠す必要があります。

誰かがこれを行う方法を教えてもらえますか?Djangoのドキュメントはそのような詳細には入っていないようです。

4

3 に答える 3

52

更新1:1)で私を成し遂げるコード(モデルのBooleanFieldにCHOICESを渡すことを忘れないでください)

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)

ラジオボタンは見苦しく、ずれているように見えますが、少なくとも機能します

  1. MyModel.pyの次の情報で解決しました:
BYADMIN_CHOICES = (
    (1, "Yes"),
    (0, "No"),
)

class TagCat(models.Model):
    by_admin = models.BooleanField(choices=BYADMIN_CHOICES,default=1)
于 2010-12-02T17:32:39.083 に答える
45

これを行う別の方法があります。つまり、同じタイプのすべてのフィールドに同じウィジェットを持たせたい場合、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

于 2012-10-28T20:08:44.447 に答える
13

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

このようにして、フィールドを完全に制御できます。

于 2013-07-01T12:48:10.867 に答える