繁体   English   中英

'NoneType' 对象没有属性 'strip' - Slugify

[英]'NoneType' object has no attribute 'strip' - Slugify

我的模型在 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 请求地址: 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.Session'AuthenticationMiddleware' .contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware')

回溯:get_response 111 中的文件“C:\\cms-rock\\vrockw\\lib\\site-packages\\django\\core\\handlers\\base.py”。 response = wrapper_callback(request, *callback_args, **callback_kwargs) 文件“C: \\cms-rock\\vrockw\\lib\\site-packages\\django\\contrib\\admin\\options.py”在包装器 584 中。返回 self.admin_site.admin_view(view)(*args, **kwargs) 文件“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" 在内部 204. return view(request, *args, **kwargs) File "C:\\cms-rock\\vrockw\\lib\\site-packages\\django\\contrib\\admin\\options.py"在 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 bo und_func(*args, **kwargs) 文件“C:\\cms-rock\\vrockw\\lib\\site-packages\\django\\utils\\decorators.py” in _wrapped_view 105. response = view_func(request, *args, **kwargs ) 文件“C:\\cms-rock\\vrockw\\lib\\site-packages\\django\\utils\\decorators.py”在bound_func 25.返回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) 文件 "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) save_model 中的文件“C:\\cms-rock\\cms\\pages\\admin.py” 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" in save 591. force_update=force_update, update_fields= update_fields) 文件 "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 ) 文件 "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)文件“C:\\cms-rock\\vrockw\\lib\\site-packages\\django\\db\\mode ls\\base.py" in _do_insert 733. using=using, raw=raw) 文件 "C:\\cms-rock\\vrockw\\lib\\site-packages\\django\\db\\models\\manager.py" in manager_method 92. return getattr(self.get_queryset(), name)(*args, **kwargs) _insert 921 中的文件“C:\\cms-rock\\vrockw\\lib\\site-packages\\django\\db\\models\\query.py”。返回query.get_compiler(using=using).execute_sql(return_id) 文件“C:\\cms-rock\\vrockw\\lib\\site-packages\\django\\db\\models\\sql\\compiler.py”在execute_sql 920. cursor.execute( sql, params) 文件 "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) 文件 "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”在语句 858 中。返回 self._executed.strip()

异常类型:/admin/pages/pages/add/ 处的 AttributeError 异常值:'NoneType' 对象没有属性 'strip'

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

好吧,我遇到了同样的问题。 这就是我固定的方式。

slugify(self.title).__str__()

Slugify 返回一个“SafeString”并且它没有任何“strip()”函数。 所以我得到一个“str”并且它有效。

此错误意味着创建的模型的title属性没有值,您需要确保您的 Page 实例具有 required 属性,然后再对其标题进行 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')

您可以使用 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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM