Estoy tratando de crear un SlugField
en 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_insert
error (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
ModelAdmin
en suadmin.py
y utilizarprepopulated_fields
para automatizar la entrada de una babosa:Aquí, cuando el usuario ingresa un valor en el formulario de administración para el
name
campo,slug
se completará automáticamente con el slugified correctoname
.fuente
slug
y losname
campos 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_fields
en 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.py
definirprepopulated_fields
;fuente
Puede consultar los documentos para
SlugField
obtener más información al respecto de manera más descriptiva.fuente