Django: Admin: changing the widget of the field in Admin Django: Admin: changing the widget of the field in Admin django django

Django: Admin: changing the widget of the field in Admin


UPDATE 1: Code that gets me done with 1) (don't forget tot pass CHOICES to the BooleanField in the model)

from main.models import TagCatfrom django.contrib import adminfrom django import formsclass MyTagCatAdminForm(forms.ModelForm):    class Meta:        model = TagCat            widgets = {              'by_admin':forms.RadioSelect            }            fields = '__all__' # required for Django 3.x    class TagCatAdmin(admin.ModelAdmin):    form = MyTagCatAdminFormadmin.site.register(TagCat, TagCatAdmin)

The radio buttons appear ugly and displaced, but at least, they work

  1. I solved with following info in MyModel.py:
BYADMIN_CHOICES = (    (1, "Yes"),    (0, "No"),)class TagCat(models.Model):    by_admin = models.BooleanField(choices=BYADMIN_CHOICES,default=1)


There is another way to do this that is, IMO much easier if you want every field of the same type to have the same widget. This is done by specifying a formfield_overrides to the ModelAdmin. For example:

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

More in the docs: https://docs.djangoproject.com/en/1.4/ref/contrib/admin/#django.contrib.admin.ModelAdmin.formfield_overrides

UPDATED: Link to Django 2.0 version:https://docs.djangoproject.com/en/2.0/ref/contrib/admin/#django.contrib.admin.ModelAdmin.formfield_overrides


Here is a more dynamic extension of mgPePe's response:

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 = TagCatclass MyAdmin(admin.ModelAdmin):    fields = ['name', 'by_admin']    form = MyAdminForm

This way you get full control over the fields.