我的模型在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("测试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', '页面',' site_options','新闻','标签','类别')已安装 中间件:(' django.contrib.sessions.middleware.SessionMiddleware', ' django.middleware.common.CommonMiddleware&#39 ;, ' django.middleware.csrf.CsrfViewMiddleware&#39 ;, ' django.contrib.auth.middleware.AuthenticationMiddleware&#39 ;, ' django.contrib.auth.middleware.SessionAuthenticationMiddleware&#39 ;, ' django.contrib.messages.middleware.MessageMiddleware&#39 ;, ' django.middleware.clickjacking.XFrameOptionsMiddleware&#39)
回溯:文件 " C:\ CMS-岩石\ vrockw \ lib中\站点包\ django的\芯\处理程序\ base.py"在 get_response 111. response = wrapped_callback(request,* callback_args,** callback_kwargs)File" C:\ cms-rock \ vrockw \ lib \ site-packages \ django \ contrib \ admin \ options.py" 在包装中 584. return self.admin_site.admin_view(view)(* args,** kwargs)File" C:\ cms-rock \ vrockw \ lib \ site-packages \ django \ utils \ decorators.py"在 _wrapped_view 105. response = view_func(request,* args,** kwargs)File" C:\ cms-rock \ vrockw \ lib \ site-packages \ django \ views \ decorators \ cache.py" 在_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-岩石\ vrockw \ lib中\站点包\ django的\ utils的\ decorators.py"在 _wrapper 29. return bound_func(* args,** kwargs)File" C:\ cms-rock \ vrockw \ lib \ site-packages \ django \ utils \ decorators.py"在 _wrapped_view 105. response = view_func(request,* args,** kwargs)File" 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 \分贝\ transaction.py"在 内 394. return func(* args,** kwargs)File" C:\ cms-rock \ vrockw \ lib \ site-packages \ django \ contrib \ admin \ options.py" 在changeform_view中 1405. self.save_model(request,new_object,form,not add)File" 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)File" C:\ cms-rock \ vrockw \ lib \ site-packages \ django \ db \ models \ base.py"在 保存 591. force_update = force_update,update_fields = update_fields)文件 " C:\ CMS岩\ vrockw \ LIB \站点包\ Django的\ DB \型号\ base.py"在 save_base 619. updated = self._save_table(raw,cls,force_insert,force_update,using,update_fields)文件 " C:\ CMS岩\ vrockw \ LIB \站点包\ Django的\ DB \型号\ base.py"在 _save_table 700. result = self._do_insert(cls._base_manager,using,fields,update_pk,raw)文件 " C:\ CMS岩\ vrockw \ LIB \站点包\ Django的\ DB \型号\ base.py"在 _do_insert 733. using = using,raw = raw)File" 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& #34;在 _插入 921. return query.get_compiler(using = using).execute_sql(return_id)File " C:\ CMS岩\ vrockw \ LIB \站点包\ Django的\ DB \型号\ SQL \ compiler.py" 在execute_sql中 920. cursor.execute(sql,params)File" 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-岩石\ vrockw \ lib中\站点包\ MySQL的\连接器\ django的\ base.py" 在last_executed_query中 371. return cursor.statement File" C:\ cms-rock \ vrockw \ lib \ site-packages \ mysql \ connector \ django \ base.py" 在 getattr 147. return getattr(self.cursor,attr)File" C:\ cms-rock \ vrockw \ lib \ site-packages \ mysql \ connector \ cursor.py"在 声明 858. return self._executed.strip()
异常类型:/ admin / pages / pages / add / Exception中的AttributeError 价值:' NoneType'对象没有属性' strip'
答案 0 :(得分:1)
尝试使用django.utils.text而不是django.template.defaultfilters
的slugify功能。来自django.template.defaultfilters的Slugify是模板过滤器,它应该在模板中使用。
答案 1 :(得分:1)
好吧,我遇到了同样的问题。这是我修复的方式。
slugify(self.title).__str__()
Slugify返回" SafeString"并且它没有任何" strip()"功能。所以我得到了一个" str"它有效。
答案 2 :(得分:0)
此错误表示创建的模型的 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')
答案 3 :(得分:0)
您可以使用 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)