2012-10-25 56 views
2

這裏的代碼在我的models.py文件中的一個片段:彈頭太短 - Django的

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預填充這樣的毛坯:

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

在管理網站,我注意到slu only只能填充到第一個字母。例如,對於搖滾,只有R被選中。我如何選擇元組的其他部分,即Rock而不是?

回答

0

簡單,改變你的GENRE_CHOICES字典的東西,如:

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

等等等等

+0

ha!你的回答讓我意識到我的問題有多愚蠢。非常感謝 – dobleV

+0

這不是一個愚蠢的問題。對象標識符不應該真的包含對象內容,這是多餘的。 – pistache

+0

我寧願在我的數據庫中有「搖滾」而不是「r」。什麼是「r」? 「搖滾」或「說唱」還是「倫巴」? :D – jpic

-1

放大MAX_LENGTH,

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

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

5月幫助,只是猜測。

0

這看起來像一個abandonned錯誤:

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

的bug修正,從1.2推遲到1.3,由於迴歸,並從未appplied 1.3 好像你可以修復,通過調整Django的代碼,或者通過應用票中提供的補丁。不知道它是否會與你的Django版本一起工作。

在此期間,你可以嘗試使用object_identifiers,將正確的預填充您的SlugField:

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

旁註:你在你的CharField有MAX_LENGTH = 1。也許這個bug實際上是固定的,但是SlugField只需要一個charbecause。雖然不確定。 編輯:這(max_length=1)實際上不會改變任何東西。感謝jpic

+0

他在CharField類型上有max_length = 1,在slug CharFild上有max_length = 100。 – jpic

+0

也許SlugField只能從CharField中讀取一個字符,因爲CharField實際上僅限於一個字符。 – pistache

+1

SlugField類不讀取任何CharField類中的任何字符,說源代碼(請參閱django/db/models/__ init__.py,類SlugField)。另外,django/contrib/admin/static/js/prepopulate.js不關心字段長度。所以我們事實上可以消除這種可能性。 – jpic