2012-12-24 4 views
6

Byłem zaskoczony, jak dokonywać wyborów w moich modelach przez wiele godzin.Django Model Choices

Do tej pory miałem problemy z zatwierdzonym polem w modelu. Chcę, aby zatwierdzony był jedną z 3 opcji, ale wydaje mi się, że jest to krotka spośród wszystkich trzech opcji. Wewnątrz muszli „” ./manage.py, mam

>>> listing.objects.all()[0].approved 
((u'1', u'Awaiting'), (u'2', u'No'), (u'3', u'Yes')) 

Moja Model:

from django.db import models 

# Create your models here. 
class directory(models.Model): 
    name = models.CharField(max_length="50") 

class listing(models.Model): 
    name = models.CharField(max_length="50") 
    directory = models.ForeignKey(directory) 
    birthday = models.DateField() 
    state = models.CharField(max_length="2") 
    owner = models.CharField(max_length="50") 
    approved = (
     (u'1', u'Awaiting'), 
     (u'2', u'No'), 
     (u'3', u'Yes'), 
    ) 

Również strona pytanie: Ale ilekroć dokonać zmiany modelu i spróbować migrować schematów z południa mój poleceń zamrozi i nigdy nie zakończą migracji schematów. Jakieś możliwe sugestie, dlaczego zamarza? Może wykrywać zmiany, ale nigdy nie zakończy ich implementacji. Ponieważ nigdy się nie kończy, nie mogę uzyskać dostępu do mojego modelu przez panel administracyjny, gdy klikam model, aby wprowadzić zmiany. Nie mogę załadować strony.

The order in which I run the commands are 
    ./manage.py convert_to_south myapp 
    ./manage.py schemamigration southtut --auto 
    ./manage.py migrate southtut (never progresses on this command after the first few lines appear) 
+1

Powinieneś raczej zamienić drugą część na własne pytanie, aby zachować temat na dany temat, zamiast uczynić go "pytaniem bocznym". –

+0

Sugeruję, abyś ponownie wypróbował migrację na Południu po naprawieniu modelu. Zmieniaj też "mojaapp" powyżej na "southtut", ponieważ inni ludzie, tacy jak ja, wezmą na nią pytanie, czy to część problemu. Zrób również nazwy klas CapWords. Może przeczytać wytyczne PEP-8 na temat Pythona, jeśli jeszcze nie: http://www.python.org/dev/peps/pep-0008/#class-names – tobych

Odpowiedz

17

approved jak masz to nie jest pole, to po prostu klasa atrybut zawierający trzy możliwości. Wybory muszą być atrybutami rzeczywistego pola:

APPROVAL_CHOICES = (
    (u'1', u'Awaiting'), 
    (u'2', u'No'), 
    (u'3', u'Yes'), 
) 
approved = models.CharField(max_length=1, choices=APPROVAL_CHOICES) 
+0

Może to być możliwe, jeśli mój typ danych pola jest liczbą całkowitą CharField? –

+2

Tak, oczywiście, dlaczego by tak nie było? –

+0

Dzięki Daniel, przeprosiny, jestem bardzo nowy w Django. Poniższy kod pracował dla mnie, a interfejs użytkownika django admin pokazuje mi teraz listę rozwijaną. ACTIVE = 0 Nieaktywne = 1 STATUS = ( (ACTIVE 'aktywny'), (nieaktywny, 'nieaktywny'), ) klasa TemplateAddon (models.Model): status = models.IntegerField (domyślnie = 0, opcje = STATUS) –