Checkbox für ManyToManyField in Django

Anstatt dieses Mehrfachauswahlfeld wollen wir in unserem Model Checkboxen haben. Dann müssen wir in unserer admin.py folgendes hinzufügen.

from django.forms import CheckboxSelectMultiple
from django.db.models import ManyToManyField
...

class UserAdmin(admin.ModelAdmin):
    #...
    formfield_overrides = {
            ManyToManyField:{'widget': CheckboxSelectMultiple}
    }
    #...
Schon haben wir Checkboxen in unserer ChangeView, da aber das ganze noch nicht wirklich gut aussieht. Sollten wir noch ein bisschen Stylesheet hinzufügen. Mal angenommen unsere models.py sieht so aus.
from django.db import models

class Group(models.Model):
    #...

class User(models.Model):
    #...
    groups = models.ManyToManyField(Group)
    #...
Dann müssen wir unser ManyToManyField eine css-class zuordnen. Dies funktioniert mit den fieldsets und eine css-Datei hinzufügen.
from django.forms import CheckboxSelectMultiple
from django.db.models import ManyToManyField
...

class UserAdmin(admin.ModelAdmin):
    #...
    formfield_overrides = {
            ManyToManyField:{'widget': CheckboxSelectMultiple}
    }
    #...
    fieldsets =(
        #...
        ('Groups', {'classes':('groupselect',), 'fields': ('groups',), }),
        #...
    )

    class Media:
        css = {'all': 
            ('css/admin_user.css',),
        }
Die Datei sollte unterhalb von MEDIA_ROOT aus der settings.py liegen. Dann können wir in der admin_users.css z.B. die häßlichen Punkte vor den Checkboxen entfernen.
.groupselect ul {list-style: none}
So sieht das ganze dann in unserer Django-Verwaltung doch schon etwas besser aus, ihr könnt mit der css natürlich auch alles andere in dem UserModeldesigen.

Tags:

Die letzten Einträge