2012-12-24 25 views
6

Modellerim arasında saatlerce nasıl seçim yapılacağına şaşırdım.Django Model Seçenekleri

Şimdiye kadar modelde onaylanmış alanımla ilgili sorunlar yaşıyorum. 3 seçenekten 1'inin onaylanmasını istiyorum, ama elde ettiğim şey üç seçeneğin bir parçası.

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

Ayrıca yan soru: Ben modeli değişiklikleri yapmak ve Güney ile şemaları göç etmeye çalışın Ama ne zaman benim komut donacak './manage.py kabuk' içinde, ben

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

Benim Modeli olsun yukarı ve göçmen şemalarını bitirmeyecek. Neden donuyor? Değişiklikleri algılayabilir, ancak bunları uygulamadan önce bitiremez. Hiçbir zaman bitmediği için, modele değişiklik yapmak için modele tıkladığımda artık yönetici panelden erişemiyorum, sayfayı asla yükleyemem.

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

: seçimler gerçek bir alanın bir özelliği olması gerekir. –

+0

Modeli düzelttikten sonra Güney geçişini tekrar denemenizi öneririm. Ayrıca, yukarıdaki "myapp" ı "southtut" olarak değiştirin, çünkü benim gibi diğer insanlar bu sorunun bir parçası olup olmadığını merak ederler. Ayrıca, sınıf isimlerini CapWords yapın. Belki de Python'daki PEP-8 yönergelerini okuyun, henüz yapmadıysanız: http://www.python.org/dev/peps/pep-0008/#class-names – tobych

cevap

17

approved bunu bir alan değildir olduğu gibi, sadece üç seçenek içeren bir sınıf niteliği var. Muhtemelen oldukça it a "Yan soru" yapmak yerine, konuyla tutmak için onu kendi soru ikinci bölümünü açmalısınız

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

Bu, alan veri türümün yerine tamsayı olması durumunda mümkün olabilir. CharField? –

+2

Evet, tabiki neden olmasın? –

+0

Teşekkürler Daniel, Özür, Ben Django için çok yeni. Aşağıdaki kod benim için çalıştı ve django admin UI şimdi bana bir açılır kapanır. durum = models.IntegerField (varsayılan: = ( (AKTİF,) 'aktif' (AKTİF, ) 'pasif') sınıfı TemplateAddon (models.Model) AKTİF = 0 AKTİF = 1 Durum = 0, seçenekler = DURUM) –

İlgili konular