【问题标题】:'NoneType' object has no attribute 'strip' - Slugify'NoneType' 对象没有属性 'strip' - Slugify
【发布时间】:2015-02-02 19:04:18
【问题描述】:

我的模型在 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)

我尝试输入代码 self.slug = slugify("test of slug") 仍然是问题,但是当他说保持信息没有问题时

这是我的错误:

环境:

请求方法:POST 请求 URL: http://xxx.xx.xx.xx:8000/admin/pages/pages/add/

Django 版本:1.7.1 Python 版本:3.4.2 已安装的应用程序: ('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') 已安装 中间件:('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')

追溯:文件 "C:\cms-rock\vrockw\lib\site-packages\django\core\handlers\base.py" 在 获取响应 111. response = Wrapped_callback(request, *callback_args, **callback_kwargs) 文件 "C:\cms-rock\vrockw\lib\site-packages\django\contrib\admin\options.py" 在包装中 584. return self.admin_site.admin_view(view)(*args, **kwargs) 文件“C:\cms-rock\vrockw\lib\site-packages\django\utils\decorators.py”中 _wrapped_view 105. response = view_func(request, *args, **kwargs) 文件 "C:\cms-rock\vrockw\lib\site-packages\django\views\decorators\cache.py" 在 _wrapped_view_func 52. response = view_func(request, *args, **kwargs) 文件 "C:\cms-rock\vrockw\lib\site-packages\django\contrib\admin\sites.py" 在内部 204. 返回视图(request, *args, **kwargs) 文件 "C:\cms-rock\vrockw\lib\site-packages\django\contrib\admin\options.py" 在 add_view 1454. 返回 self.changeform_view(request, None, form_url, extra_context) 文件 "C:\cms-rock\vrockw\lib\site-packages\django\utils\decorators.py" 在 _包装器 29. 返回bound_func(*args, **kwargs)文件“C:\cms-rock\vrockw\lib\site-packages\django\utils\decorators.py”中 _wrapped_view 105. response = view_func(request, *args, **kwargs) 文件 "C:\cms-rock\vrockw\lib\site-packages\django\utils\decorators.py" 在 bound_func 25. return func.get(self, type(self))(*args2, **kwargs2) File "C:\cms-rock\vrockw\lib\site-packages\django\db\交易.py”在 内 394. 返回 func(*args, **kwargs) 文件 "C:\cms-rock\vrockw\lib\site-packages\django\contrib\admin\options.py" 在 changeform_view 1405. self.save_model(request, new_object, form, not add) 文件 "C:\cms-rock\cms\pages\admin.py" 在 save_model 45. obj.save() 保存文件“C:\cms-rock\cms\pages\models.py” 37. super(Pages, self).save( *args, **kwargs) 文件 "C:\cms-rock\vrockw\lib\site-packages\django\db\models\base.py" 在 保存 591. force_update=force_update, update_fields=update_fields) 文件 "C:\cms-rock\vrockw\lib\site-packages\django\db\models\base.py" 在 保存基地 619. 更新 = self._save_table(raw, cls, force_insert, force_update, using, update_fields) 文件 "C:\cms-rock\vrockw\lib\site-packages\django\db\models\base.py" 在 _save_table 700. 结果 = self._do_insert(cls._base_manager, using, fields, update_pk, raw) 文件 "C:\cms-rock\vrockw\lib\site-packages\django\db\models\base.py" 在 _do_insert 733. using=using, raw=raw) 文件“C:\cms-rock\vrockw\lib\site-packages\django\db\models\manager.py”中 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 _插入 921. 返回 query.get_compiler(using=using).execute_sql(return_id) 文件 "C:\cms-rock\vrockw\lib\site-packages\django\db\models\sql\compiler.py" 在执行_sql 920. cursor.execute(sql, params) 文件“C:\cms-rock\vrockw\lib\site-packages\django\db\backends\utils.py”中 执行 85. sql = self.db.ops.last_executed_query(self.cursor, sql, params) 文件 "C:\cms-rock\vrockw\lib\site-packages\mysql\connector\django\base.py" 在 last_executed_query 371. 返回 cursor.statement 文件 "C:\cms-rock\vrockw\lib\site-packages\mysql\connector\django\base.py" 在 getattr 中 147. return getattr(self.cursor, attr) 文件“C:\cms-rock\vrockw\lib\site-packages\mysql\connector\cursor.py”中 陈述 858. return self._executed.strip()

异常类型:AttributeError at /admin/pages/pages/add/ 异常 值:“NoneType”对象没有属性“strip”

【问题讨论】:

  • 这意味着self.titleNoneNoneType 类型)。你确定里面有数据吗?
  • 有数据,如果使用 "self.slug = self.title" 可以正常工作
  • 很确定这是 mysql\connector\cursor.py 中的一个错误,bugs.mysql.com/bug.php?id=74675

标签: python django


【解决方案1】:

尝试使用 django.utils.text 中的 slugify 函数,而不是 django.template.defaultfilters。来自 django.template.defaultfilters 的 Slugify 是模板过滤器,它应该在模板中使用。

【讨论】:

  • " from django.utils.text import slugify " 不工作:/
【解决方案2】:

好吧,我也遇到了同样的问题。我就是这样解决的。

slugify(self.title).__str__()

Slugify 返回一个“SafeString”,它没有任何“strip()”函数。所以我得到了一个“str”,它可以工作。

【讨论】:

  • 这对我有用。丑陋的丑陋,但似乎没有其他方法可以解决问题
【解决方案3】:

这个错误意味着创建模型的title属性没有值, 您需要确保您的 Page 实例具有所需的属性,然后再对它的标题进行 slugify。

以下代码是一个很好的解决方法,但您仍然需要知道为什么您的模型在保存时没有标题。

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

您的最佳解决方案是使用 Django Autoslug 库,这将使您免于为 slug 字段设置值的所有麻烦。

检查一下:

from autoslug import AutoSlugField

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

【讨论】:

    【解决方案4】:

    您可以使用 django 信号来解决此问题。尝试在您的 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)
    

    【讨论】:

      猜你喜欢
      • 2017-05-03
      • 1970-01-01
      • 2020-10-22
      • 2021-07-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-25
      相关资源
      最近更新 更多