2017-06-18 41 views
1

我正在Django製作一個茶目錄,我對模型有點問題。我希望數據庫中的某些內容有1-5的選擇,對於某些評級。例如,對於茶類,我想要一個1-5的咖啡等級。我用下面的代碼來做這件事:Django Admin - 一個Integer模型的工作選擇,但不是另一個

one_to_five_choices = zip(range(1,5+1), range(1,5+1)) 
... 

class TeaType(models.Model): 
    name = models.CharField(max_length=20, primary_key=True) 
    steeping_temperature = models.PositiveSmallIntegerField() 
    steeping_time_minutes = models.PositiveSmallIntegerField() 
    caffeine_level = models.PositiveSmallIntegerField(choices=one_to_five_choices) 
    directions = models.TextField() 

    def __str__(self): 
     return self.name 

它的功能完美!

enter image description here

但是,我似乎對收視率相同的代碼,它並沒有顯示此框的選擇。

class Rating(models.Model): 
    rating = models.PositiveSmallIntegerField(choices=one_to_five_choices) 
    tea = models.ForeignKey(Tea) 
    user = models.ForeignKey(User) 

    created_at = models.DateTimeField(auto_now_add=True) 
    updated_at = models.DateTimeField(auto_now=True) 

    def __str__(self): 
     return "{} star rating for {} by {}".format(self.rating, self.tea, self.user.get_username()) 

    class Meta: 
     unique_together = (("user", "tea"),) 

這裏是圖片:enter image description here

有沒有什麼有趣的事情在admin.py導致此

for m in [TeaType, Brand, Ingredient, Picture, Rating]: 
    admin.site.register(m) 

任何想法,爲什麼發生這種情況?

+1

我已經閱讀了所有爲admin生成表單字段的代碼(請參閱'modelform_factory'函數),並且沒有指出爲什麼會發生這種情況。工廠功能不應該忽視你在現場設置選擇。我認爲,如果你能複製它,你會發現自己有一個bug,你可能會報告它:https://code.djangoproject.com/newticket – fixmycode

+0

好吧 - 我不知道如何製作一個更小的可重複版本,但我想我會提交票。 – Arya

+0

不要說我的評論,我認爲@ user61000下面是對的 – fixmycode

回答

2

在python 3上,zip()返回一個生成器。你的第一個模型耗盡了發電機,沒有選擇第二個模型。在list()調用中包裝one_to_five_choices應該能夠做到這一點。

相關問題