Je suis en train de créer une SlugField en Django.
J’ai créé ce modèle simple :
J’ai ensuite procédez comme suit :
Je m’attendais à b-b-b-b
Je suis en train de créer une SlugField en Django.
J’ai créé ce modèle simple :
J’ai ensuite procédez comme suit :
Je m’attendais à b-b-b-b
Vous aurez besoin d'utiliser la slugify fonction.
>>> from django.template.defaultfilters import slugify
>>> slugify("b b b b")
u'b-b-b-b'
>>>
Vous pouvez appeler slugify
automatiquement en substituant l' save
méthode:
class test(models.Model):
q = models.CharField(max_length=30)
s = models.SlugField()
def save(self, *args, **kwargs):
self.s = slugify(self.q)
super(test, self).save(*args, **kwargs)
Sachez que la ci-dessus sera la cause de votre URL à changer lorsque l' q
champ est modifié, ce qui peut provoquer la rupture de liens. Il peut être préférable de générer de la limace qu'une seule fois lorsque vous créez un nouvel objet:
class test(models.Model):
q = models.CharField(max_length=30)
s = models.SlugField()
def save(self, *args, **kwargs):
if not self.id:
# Newly created object, so set slug
self.s = slugify(self.q)
super(test, self).save(*args, **kwargs)
Si vous utilisez l’interface d’administration pour ajouter de nouveaux éléments de votre modèle, vous pouvez configurer un ModelAdmin pour cela dans votre ' admin.py ', qui automatise la saisie d’une limace :
Ici, lorsque l’utilisateur entre une valeur sous la forme de l’admin pour le champ, le
se remplira automatiquement avec le bon slugified `` .
Dans la plupart des cas, le slug ne devrait pas changer, donc vous ne voulez vraiment le calculer qu'à la première sauvegarde:
class test(models.Model):
q = models.CharField(max_length=30)
s = models.SlugField(editable=False) # hide from admin
def save(self):
if not self.id:
self.s = slugify(self.q)
super(test, self).save()
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.