Estoy tratando de crear un SlugFielden Django.
Creé este modelo simple:
from django.db import models
class Test(models.Model):
q = models.CharField(max_length=30)
s = models.SlugField()
Entonces hago esto:
>>> 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'
Yo estaba esperando b-b-b-b.
python
django
django-models
slug
Johnd
fuente
fuente

def save(self):condef save(self, *args, **kwargs):el fin de errores Evita sea lanzado al escribir algo asítest.objects.create(q="blah blah blah").slugify()también se puede encontrar endjango.utils.text.slugify, no está claro cuándo se agregó esto.Hay una esquina con algunos caracteres utf-8
Ejemplo:
Esto se puede resolver con Unidecode
fuente
Una pequeña corrección a la respuesta de Thepeer: para anular la
save()función en las clases de modelo, es mejor agregarle argumentos:De lo contrario,
test.objects.create(q="blah blah blah")se producirá unforce_inserterror (argumento inesperado).fuente
return super(test, self).save(*args, **kwargs). Creo que este método regresaNone, y no conozco ningún plan para cambiar eso, pero no hace daño devolver lo que hace el método de la superclase en caso de que cambie en algún momento en el futuro.Si está utilizando la interfaz de administración para agregar nuevos elementos de su modelo, puede configurar un
ModelAdminen suadmin.pyy utilizarprepopulated_fieldspara automatizar la entrada de una babosa:Aquí, cuando el usuario ingresa un valor en el formulario de administración para el
namecampo,slugse completará automáticamente con el slugified correctoname.fuente
slugy losnamecampos tienen traducciones. ¿Cómo puedo hacer eso con las traducciones? Como intenté agregar'slug_en':('name_en',)y obtuve el error de que el atributo no existe en mi modelo.En la mayoría de los casos, el slug no debería cambiar, por lo que realmente solo desea calcularlo en el primer guardado:
fuente
Use
prepopulated_fieldsen su clase de administrador:fuente
Si no desea establecer el campo slugfield en No ser editable, entonces creo que querrá establecer las propiedades Nulo y En blanco en Falso. De lo contrario, recibirá un error al intentar guardar en Admin.
Entonces, una modificación al ejemplo anterior sería ::
fuente
Estoy usando Django 1.7
Cree un SlugField en su modelo como este:
Luego en
admin.pydefinirprepopulated_fields;fuente
Puede consultar los documentos para
SlugFieldobtener más información al respecto de manera más descriptiva.fuente