使用AutoSlugField和Django-tagging时出现ValueError
我遇到了一个叫做ValueError的错误,下面是完整的错误追踪信息,最后的部分是:
异常类型:ValueError,发生在/admin/blog/post/add/
异常信息:无法将'树'转换为整数,基数为10
我在使用来自django-command-extensions的AutoSlugField
。
我正在尝试让django-tagging正常工作,这是我的models.py文件:
class Post(models.Model):
"""Blog post model."""
title = models.CharField('title', max_length=120)
slug = AutoSlugField('slug', unique=True, max_length=120, primary_key=True)
body = models.TextField('body')
published = models.DateTimeField('publish', default=datetime.now)
category = models.ForeignKey(Category)
tags = TagField()
class Meta:
verbose_name = ('post')
verbose_name_plural = ('posts')
ordering = ('-published',)
get_latest_by = 'published'
def __unicode__(self):
return self.title
2 个回答
0
slug = AutoSlugField('slug', unique=True, max_length=120, primary_key=True)
你的主键不是一个整数。
0
我觉得这可能不是导致你错误的原因,但在你的 AutoSlugField
声明中缺少了 populate_from
,而且我觉得你不需要 unique=True
:
class Post(models.Model):
"""Blog post model."""
title = models.CharField('title', max_length=120)
slug = AutoSlugField('slug', unique=True, max_length=120, primary_key=True)
... snip...
我想你应该这样写:
slug = AutoSlugField(populate_from = 'title', max_length=120, primary_key=True)
或者至少,这就是我在 我的一些代码 中使用 AutoSlugField
的方式。
我觉得你出现错误的原因是 django-tagging 期望主键是整数,而你的主键将是字符串。你声明 primary_key=True
是出于什么好理由吗?为什么不直接使用自动添加的 id
列的默认值呢?
如果你想通过 URL 中的 slug 来访问你的帖子(毕竟这就是 slug 的意义所在!),那么在你的 urls.py
中有这样的条目:
url(r'post/(?P<slug>.+)/$', single_post)
你需要一个这样的视图:
def single_post(request, slug):
post = get_object_or_404(Post, slug = slug)
...
或者你可以使用 通用视图。