[Django] Wie am besten ein slug field automatisch füllen???

Django, Flask, Bottle, WSGI, CGI…
Antworten
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Es gibt mehrere Wege um ein Slug Feld automatisch füllen zu lassen, siehe: http://stackoverflow.com/questions/8378 ... -in-django

Aber welche ist die beste?

Beispiel:

Code: Alles auswählen

class Foo(models.Model):
    title = models.CharField()
    slug = models.SlugField()

class FooAdmin(admin.ModelAdmin):
    prepopulated_fields = {'slug': ('title',)}
Schön. Aber "prepopulated" funktioniert ja nur im Admin. Ich hätte gern das das Model die Sache direkt übernimmt.
Also könnte man das machen:

Code: Alles auswählen

class Foo(models.Model):
    title = models.CharField()
    slug = models.SlugField(null=True, blank=True)

    def save(self, *args, **kwargs):
        if not self.slug:
            self.slug = slugify(self.title)

        super(Foo, self).save(*args, **kwargs)
Fein. Aber null=True, blank=True ist eigentlich doof. Denn es stimmt ja im Grunde nicht. Läßt man es weg, schlagen aber die Validierungen fehl. Hab deswegen mal probiert, den slug nicht in save() sondern in clean_fields() zu setzten. Aber das bringt es auch nicht.

Also welches ist die beste Lösung? Übersehe ich was?

EDIT: Also es gibt eine allumfassende Lösung als zusätzliches Paket: django-autoslug
Aber ich möchte dafür nicht noch eine zusätzliche Abhängigkeit aufnehmen. Somit nehme ich erstmal die zweite Varianten: In save() setzten und beim slug field blank=True nutzten (allerdings nicht null=True, denn im Admin wird eh u"" gesetzt, somit bleibt es da eh nicht bei None)

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Antworten