使用AutoSlugField和Django-tagging时出现ValueError

1 投票
2 回答
693 浏览
提问于 2025-04-15 22:58

我遇到了一个叫做ValueError的错误,下面是完整的错误追踪信息,最后的部分是:

异常类型:ValueError,发生在/admin/blog/post/add/
异常信息:无法将'树'转换为整数,基数为10

我在使用来自django-command-extensionsAutoSlugField

我正在尝试让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)
   ...

或者你可以使用 通用视图

撰写回答