2017-06-18 2 views
1

Ich mache einen Tee-Katalog in Django, und ich habe ein bisschen ein Problem mit den Modellen. Ich möchte, dass einige Dinge in der Datenbank eine Auswahl für 1-5 für bestimmte Bewertungen haben. Zum Beispiel, für den Tee-Typ, möchte ich einen Caffine Level von 1-5. Ich mache das mit dem folgenden Code:Django Admin - Auswahl funktioniert für ein Integer-Modell, aber kein anderes

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 

Und es funktioniert perfekt!

enter image description here

Allerdings habe ich scheinbar den gleichen Code für Ratings, und es zeigt nicht diese Box für die Auswahl.

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"),) 

Und hier ist das Bild: enter image description here

Es interessant los in der admin.py nichts diese

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

Jede Idee, um zu bewirken, ist, warum dies geschieht?

+1

Ich habe den ganzen Code gelesen, der Formularfelder für den Admin erzeugt (siehe die Funktion 'modelform_factory') und nichts deutet darauf hin, warum dies geschieht. Die Factory-Funktion sollte nicht ignorieren, dass Sie Optionen in diesem Feld festlegen. Ich denke, wenn Sie es reproduzieren können, haben Sie einen Fehler gefunden und Sie können es melden: https://code.djangoproject.com/newticket – fixmycode

+0

Ok - ich habe keine Ahnung, wie ich eine kleinere reproduzierbare Version davon machen kann , aber ich denke, ich werde das Ticket trotzdem ablegen. – Arya

+0

vergiss meinen Kommentar, ich denke @ user61000 unten ist richtig – fixmycode

Antwort

2

In python 3 gibt zip() einen Generator zurück. Ihr erstes Modell erschöpft diesen Generator und lässt keine Wahl für das 2. Modell. das Umschließen von one_to_five_choices in einem list() -Aufruf sollte den Trick machen.

Verwandte Themen