tengo un problema con mi modelo en la linea de slugify

from django.db import models
from django.contrib.auth.models import User
from django.template.defaultfilters import slugify

# Create your models here.
class Pages(models.Model):
    title = models.CharField(max_length=255)
    slug = models.SlugField(blank=True)
    content =  models.TextField(blank=True)
    publish_at = models.DateTimeField(auto_now_add=True)
    update_at = models.DateTimeField(auto_now=True)
    order =  models.IntegerField(default=0)
    type_content = models.CharField(max_length=255)
    user = models.ForeignKey(User)  
    status =models.IntegerField(default=1)

    def __str__(self):
        return self.title   


    def save(self,  *args, **kwargs):

        if not self.slug:
            self.slug = slugify(self.title)

        #self.user=self.request.user
        super(Pages, self).save( *args, **kwargs)

Probé poniendo el código self.slug=slugify("test de slug") y sigue el problema, pero cuando dice guarda la información sin problemas

este es mi error:

Environment:

Request Method: POST Request URL: http://xxx.xx.xx.xx:8000/admin/pages/pages/add/

Django Version: 1.7.1 Python Version: 3.4.2 Installed Applications: ('django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'seo', 'pages', 'site_options', 'news', 'tags', 'category') Installed Middleware: ('django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.auth.middleware.SessionAuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware')

Traceback: File "C:\cms-rock\vrockw\lib\site-packages\django\core\handlers\base.py" in get_response 111. response = wrapped_callback(request, *callback_args, **callback_kwargs) File "C:\cms-rock\vrockw\lib\site-packages\django\contrib\admin\options.py" in wrapper 584. return self.admin_site.admin_view(view)(*args, **kwargs) File "C:\cms-rock\vrockw\lib\site-packages\django\utils\decorators.py" in _wrapped_view 105. response = view_func(request, *args, **kwargs) File "C:\cms-rock\vrockw\lib\site-packages\django\views\decorators\cache.py" in _wrapped_view_func 52. response = view_func(request, *args, **kwargs) File "C:\cms-rock\vrockw\lib\site-packages\django\contrib\admin\sites.py" in inner 204. return view(request, *args, **kwargs) File "C:\cms-rock\vrockw\lib\site-packages\django\contrib\admin\options.py" in add_view 1454. return self.changeform_view(request, None, form_url, extra_context) File "C:\cms-rock\vrockw\lib\site-packages\django\utils\decorators.py" in _wrapper 29. return bound_func(*args, **kwargs) File "C:\cms-rock\vrockw\lib\site-packages\django\utils\decorators.py" in _wrapped_view 105. response = view_func(request, *args, **kwargs) File "C:\cms-rock\vrockw\lib\site-packages\django\utils\decorators.py" in bound_func 25. return func.get(self, type(self))(*args2, **kwargs2) File "C:\cms-rock\vrockw\lib\site-packages\django\db\transaction.py" in inner 394. return func(*args, **kwargs) File "C:\cms-rock\vrockw\lib\site-packages\django\contrib\admin\options.py" in changeform_view 1405. self.save_model(request, new_object, form, not add) File "C:\cms-rock\cms\pages\admin.py" in save_model 45. obj.save() File "C:\cms-rock\cms\pages\models.py" in save 37. super(Pages, self).save( *args, **kwargs) File "C:\cms-rock\vrockw\lib\site-packages\django\db\models\base.py" in save 591. force_update=force_update, update_fields=update_fields) File "C:\cms-rock\vrockw\lib\site-packages\django\db\models\base.py" in save_base 619. updated = self._save_table(raw, cls, force_insert, force_update, using, update_fields) File "C:\cms-rock\vrockw\lib\site-packages\django\db\models\base.py" in _save_table 700. result = self._do_insert(cls._base_manager, using, fields, update_pk, raw) File "C:\cms-rock\vrockw\lib\site-packages\django\db\models\base.py" in _do_insert 733. using=using, raw=raw) File "C:\cms-rock\vrockw\lib\site-packages\django\db\models\manager.py" in manager_method 92. return getattr(self.get_queryset(), name)(*args, **kwargs) File "C:\cms-rock\vrockw\lib\site-packages\django\db\models\query.py" in _insert 921. return query.get_compiler(using=using).execute_sql(return_id) File "C:\cms-rock\vrockw\lib\site-packages\django\db\models\sql\compiler.py" in execute_sql 920. cursor.execute(sql, params) File "C:\cms-rock\vrockw\lib\site-packages\django\db\backends\utils.py" in execute 85. sql = self.db.ops.last_executed_query(self.cursor, sql, params) File "C:\cms-rock\vrockw\lib\site-packages\mysql\connector\django\base.py" in last_executed_query 371. return cursor.statement File "C:\cms-rock\vrockw\lib\site-packages\mysql\connector\django\base.py" in getattr 147. return getattr(self.cursor, attr) File "C:\cms-rock\vrockw\lib\site-packages\mysql\connector\cursor.py" in statement 858. return self._executed.strip()

Exception Type: AttributeError at /admin/pages/pages/add/ Exception Value: 'NoneType' object has no attribute 'strip'

respuesta

Intente usar la función slugify de django.utils.text en lugar de django.template.defaultfilters. Slugify de django.template.defaultfilters es un filtro de plantilla y debe usarse en la plantilla.

Bueno, yo tuve el mismo problema. Así lo arreglé.

slugify(self.title).__str__()

Slugify devuelve un "SafeString" y no tiene ninguna función "strip()". Así que obtengo un "str" ​​y funciona.

Este error significa que la titlepropiedad del modelo creado no tiene un valor, debe asegurarse de que su instancia de página tenga el atributo requerido antes de modificar su título.

el siguiente código es una buena solución, pero aún necesita saber por qué su modelo no tiene un título cuando se guarda.

...
class Pages(models.Model):
    ...
    def save(self,  *args, **kwargs):
        if self.title and not self.slug:
            self.slug = slugify(self.title)
     ...

Una solución óptima para usted es utilizar la biblioteca Django Autoslug que le ahorrará todas las molestias de establecer un valor para su campo de slug.

Échale un vistazo:

from autoslug import AutoSlugField

class Pages(Model):
    title = CharField(max_length=255)
    slug =  AutoSlugField(populate_from='title')

Puede usar señales Django para resolver este problema. Intente agregar el siguiente código al final de su models.py

from django.db.models.signals import pre_save
from django.dispatch import receiver

@receiver(pre_save, sender=Pages)
def pre_save_pages(sender, instance, *args, **kwargs):
    if not instance.u_id:
        instance.slug = slugify(instance.title)