使用AutoSlugField和Django-tagging时的ValueError

时间:2010-05-21 06:26:03

标签: python django tagging

遇到ValueError,这里是full traceback,其结尾是:

  

异常类型:/ admin / blog / post / add /
的ValueError   异常值:int()的基数为10的无效文字:'treef'

我正在使用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 :(得分:0)

我认为这不会导致您的错误,但您在populate_from声明中遗漏了AutoSlugField,我认为您不需要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)

或者至少,这就是我在some of my code中使用AutoSlugField的方式。

我认为你得到了你的错误,因为django-tagging期望主键是整数,而你的主键是一个字符串。您的primary_key=True声明是否有充分理由?为什么不使用自动添加的id列的默认值?

如果您想使用网址中的slug访问您的帖子(这毕竟是slu!的重点!),那么在urls.py中给出此条目:

url(r'post/(?P<slug>.+)/$', single_post)

你想要一个这样的视图:

def single_post(request, slug):
   post = get_object_or_404(Post, slug = slug)
   ...

或者您可以使用generic views

答案 1 :(得分:0)

slug = AutoSlugField('slug', unique=True, max_length=120, primary_key=True)

您的主键不是int。