2012-12-24 18 views
6

Sono stato perplesso da come fare le scelte nei miei modelli per ore.Scelte del modello di Django

Finora ho riscontrato problemi con il campo approvato nel modello. Voglio che sia approvato 1 delle 3 scelte, ma quello che mi sembra sia una tupla di tutte e tre le scelte. Entro 'shell ./manage.py', ho

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

il mio modello:

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

domanda lato anche: Ma ogni volta che faccio le modifiche del modello e tenta di migrare gli schemi con il Sud mia riga di comando si blocca e non terminerà mai la migrazione degli schemi. Qualche suggerimento sul perché si blocca? Può rilevare i cambiamenti ma non finirà mai di implementarli. Perché non finisce mai, non posso più accedere al mio modello attraverso il pannello di amministrazione quando faccio clic sul modello per apportare modifiche, non riesco mai a caricare la pagina.

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

Probabilmente dovresti trasformare la seconda parte nella sua stessa domanda per mantenere le cose in argomento, piuttosto che farne una "domanda a parte". –

+0

Ti suggerisco di provare nuovamente la migrazione Sud dopo aver risolto il modello. Inoltre, cambia "myapp" in alto a "southtut" perché le altre persone come me se ne accorgeranno chiedendosi se questo è parte del problema. Inoltre, rendi i nomi delle classi CapWords. Forse leggi le linee guida PEP-8 su Python se non lo hai già fatto: http://www.python.org/dev/peps/pep-0008/#class-names – tobych

risposta

17

approved come si deve non è un campo, è semplicemente un attributo di classe che contiene le tre scelte. Le scelte devono essere un attributo di un campo reale:

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

Questo può essere possibile se il mio tipo di dati di campo è invece intero di CharField? –

+2

Sì, certo, perché non dovrebbe essere? –

+0

Grazie Daniel, Apology, sono molto nuovo a Django. Il codice seguente ha funzionato per me e l'interfaccia utente di django mi mostra un elenco a discesa ora. ACTIVE = 0 INACTIVE = 1 STATUS = ( (ACTIVE, 'attivo'), (INATTIVO, 'inactive'), ) classe TemplateAddon (models.Model): status = models.IntegerField (predefinito = 0, scelte = STATO) –

Problemi correlati