Slug太短 - Django

时间:2012-10-25 07:02:23

标签: python django

这是我的models.py文件中的一段代码:

GENRE_CHOICES = (
             ('R', 'Rock'),
             ('B', 'Blues'),
             ('J', 'Jazz'),
             ('P', 'Pop'), 
             ('H', 'Hip-Hop'),    
             )

class Genre(models.Model):
  genre_choices = models.CharField(max_length=1, choices=GENRE_CHOICES)
  slug = models.SlugField(max_length = 100, unique = True)

admin.py预先填充了这样的slu ::

class GenreAdmin(admin.ModelAdmin):
  prepopulated_fields = {"slug": ("genre_choices",)}

在管理站点中,我注意到slug只填充到第一个字母。例如,对于摇滚,仅选择R。如何选择元组的其他部分,即Rock?

3 个答案:

答案 0 :(得分:0)

简单,将您的GENRE_CHOICES dict更改为:

 ('rock', 'Rock'),
 ('hip-hop', 'Hip-Hop'),

等等

答案 1 :(得分:0)

这看起来像是一个被遗弃的错误:

https://code.djangoproject.com/ticket/9983

由于回归,错误修正从1.2推迟到1.3,并且从未应用到1.3 似乎你可以通过调整Django代码或通过应用票证中提供的补丁来解决这个问题。不确定它是否适用于您的Django版本。

与此同时,您可以尝试使用能够正确预填充SlugField的object_identifiers:

GENRE_CHOICES = (
             ('rock', 'Rock'),
             ('blues', 'Blues'),
             ('jazz', 'Jazz'),
             ('pop', 'Pop'), 
             ('hip-hop', 'Hip-Hop'),    
             )

旁注:你的CharField中有max_length = 1。也许这个bug实际上已经修复了,但是SlugField只需要一个字符就可以了。虽然不确定。 编辑:此(max_length=1)实际上不会改变任何内容。感谢jpic

答案 2 :(得分:-1)

放大max_length,

genre_choices = models.CharField(max_length=1, choices=GENRE_CHOICES)

genre_choices = models.CharField(max_length=10, choices=GENRE_CHOICES)

可能有帮助,只是猜测。