ValueError при использовании AutoSlugField и Django-тегов - PullRequest
1 голос
/ 21 мая 2010

Я работаю в ValueError, вот полный возврат , конец которого:

Тип исключения: ValueError в / admin / blog / post / add /
Значение исключения: недопустимый литерал для int () с основанием 10: 'treef'

Я использую AutoSlugField из django-command-extensions .

Я пытаюсь заставить django-tagging работать, это мои модели.

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 голосов
/ 28 марта 2013
slug = AutoSlugField('slug', unique=True, max_length=120, primary_key=True)

Ваш первичный ключ не является целым.

0 голосов
/ 21 мая 2010

Я не думаю, что это является причиной вашей ошибки, но вы пропустили 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)

Или, по крайней мере, именно так я использую AutoSlugField в некоторых моих кодах .

Я думаю, что вы получаете ошибку, потому что django-tagging ожидает, что первичные ключи будут целыми числами, тогда как ваш первичный ключ будет строкой. Есть ли веская причина для вашей декларации primary_key=True? Почему бы просто не использовать значение по умолчанию для автоматически добавляемого столбца id?

Если вы хотите получить доступ к своим сообщениям, используя слаг в своих URL (что, в конце концов, и есть смысл слагов!), Тогда укажите эту запись в вашем urls.py:

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

Вы хотите такой вид:

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

Или вы можете использовать универсальные виды .

...