Ich versuche ein SlugField
in Django zu erstellen .
Ich habe dieses einfache Modell erstellt:
from django.db import models
class Test(models.Model):
q = models.CharField(max_length=30)
s = models.SlugField()
Ich mache dann folgendes:
>>> from mysite.books.models import Test
>>> t=Test(q="aa a a a", s="b b b b")
>>> t.s
'b b b b'
>>> t.save()
>>> t.s
'b b b b'
Ich hatte erwartet b-b-b-b
.
python
django
django-models
slug
Johnd
quelle
quelle
def save(self):
mit ,def save(self, *args, **kwargs):
um Fehler zu vermeiden von geworfen werden , wenn so etwas zu schreibentest.objects.create(q="blah blah blah")
.slugify()
kann auch in gefunden werdendjango.utils.text.slugify
, nicht klar, wann dies hinzugefügt wurde.Es gibt einen Eckfall mit einigen utf-8-Zeichen
Beispiel:
Dies kann mit Unidecode gelöst werden
quelle
Eine kleine Korrektur zu Thepeers Antwort: Um die
save()
Funktion in Modellklassen zu überschreiben , fügen Sie besser Argumente hinzu:Andernfalls
test.objects.create(q="blah blah blah")
führt dies zu einemforce_insert
Fehler (unerwartetes Argument).quelle
return super(test, self).save(*args, **kwargs)
. Ich denke, diese Methode kehrt zurückNone
, und ich kenne keine Pläne, dies zu ändern, aber es schadet nicht, zurückzugeben, was die Methode der Oberklasse tut, falls sie sich irgendwann in der Zukunft ändert.Wenn Sie die Administrationsoberfläche verwenden, um neue Elemente Ihres Modells hinzuzufügen, können Sie ein
ModelAdmin
in Ihrem einrichtenadmin.py
und verwenden,prepopulated_fields
um die Eingabe eines Slugs zu automatisieren:Wenn der Benutzer im Administrationsformular einen Wert für das
name
Feldslug
eingibt , wird dieser automatisch mit dem richtigen Slugified gefülltname
.quelle
slug
undname
Felder haben Übersetzungen. Wie kann ich das mit Übersetzungen machen? Weil ich versucht habe hinzuzufügen'slug_en':('name_en',)
und den Fehler erhalten habe, dass das Attribut in meinem Modell nicht vorhanden ist.In den meisten Fällen sollte sich der Slug nicht ändern, daher möchten Sie ihn wirklich nur beim ersten Speichern berechnen:
quelle
Verwendung
prepopulated_fields
in Ihrer Admin-Klasse:quelle
Wenn Sie das Slugfield nicht auf Nicht bearbeitbar setzen möchten, sollten Sie die Eigenschaften Null und Leer auf False setzen. Andernfalls wird beim Speichern in Admin eine Fehlermeldung angezeigt.
Eine Modifikation des obigen Beispiels wäre also ::
quelle
Ich benutze Django 1.7
Erstellen Sie ein SlugField in Ihrem Modell wie folgt:
Dann in
admin.py
definierenprepopulated_fields
;quelle
Sie können in den Dokumenten
SlugField
nachsehen , um mehr darüber zu erfahren.quelle