1

J'ai un modèle avec un tas de champs. Deux des champs ont des choix. Ils ressemblent à ceci:Django - champ de choix montre la clé, pas la valeur

SNAIL_MAIL_INVOICE_CHOICES = (
    ('Y', 'Yes'), 
    ('N', 'No'), 
) 

SNAIL_MAIL_CHOICES = (
    ('Y', 'Yes'), 
    ('N', 'No'), 
) 

snailMailOnly = models.CharField(max_length = 3, verbose_name = 'Snail Mail Only?', choices = SNAIL_MAIL_CHOICES, default='Y') 
snailMailInvoice = models.CharField(max_length = 3, verbose_name = 'Snail Mail Invoice?', choices = SNAIL_MAIL_INVOICE_CHOICES, default='Y') 

Quand je montre ces deux valeurs dans un modèle Django, je le fais comme ceci:

<tr><td>Snail Mail Only?</td><td>{{contact.get_snailMailOnly_display}}</td></tr> 
    <tr><td>Snail Mail Invoice?</td><td>{{contact.get_snailMailInvoice_display}}</td></tr> 

Le problème est que si le premier champ snailMailOnly afficher les choix Yes et No correctement, le deuxième champ snailMailInvoice affiche seulement Y et N.

Qu'est-ce que je fais mal ici?

Merci

EDIT - l'ajout de code modèle de contact:

class System_Contact(models.Model): 
IS_MAIN_CONTACT_CHOICES = (
    ('Y', 'Yes'), 
    ('N', 'No'), 
) 

IS_SYSTEM_OWNER_CHOICES = (
    ('Y', 'Yes'), 
    ('N', 'No'), 
) 

IS_RESSY_CONTACT_CHOICES = (
    ('Y', 'Yes'), 
    ('N', 'No, this is a commercial contact'), 
) 

TRADE_CHOICES = (
    ('EL', 'Electrician'), 
    ('LA', 'Landscaper'), 
    ('PL', 'Plumber'), 
    ('TR', 'Trencher'), 
) 

SNAIL_MAIL_CHOICES = (
    ('Y', 'Yes'), 
    ('N', 'No'), 
) 

SNAIL_MAIL_INVOICE_CHOICES = (
    ('Y', 'Yes'), 
    ('N', 'No'), 
) 


firstInitial = models.CharField(max_length = 10, verbose_name = 'First Initial', blank = True, null = True) 
firstName = models.CharField(max_length = 60, verbose_name = 'First Name', blank = True, null = True) 
lastName = models.CharField(max_length = 160, verbose_name = 'Last Name', blank = True, null = True) 
phonetically = models.CharField(max_length = 100, verbose_name = 'Phonetically', blank = True, null = True) 
companyName = models.CharField (max_length = 160, verbose_name = 'Company Name', blank = True, null = True) #Only used for Commercial Owners, no other field needed 
homePhone = models.CharField(max_length = 60, verbose_name = 'Home Phone Number', blank = True, null = True) 
officePhone = models.CharField(max_length = 60, verbose_name = 'Office Phone Number', blank = True, null = True) 
cellPhone = models.CharField(max_length = 60, verbose_name = 'Cell Phone Number', blank = True, null = True) 
faxNumber = models.CharField (max_length= 60, blank=True, null=True, verbose_name = 'Fax Number') 
isMainContact = models.CharField (max_length = 3, verbose_name = 'Is the Main Contact?', choices = IS_MAIN_CONTACT_CHOICES, default='N') 
isRessyContact = models.CharField (max_length = 3, verbose_name = 'Is this a Ressy Contact?', choices = IS_RESSY_CONTACT_CHOICES, default='Y') 

isArchived = models.BooleanField(verbose_name = 'Archived?', default = False) 
systemOwner = models.CharField (max_length = 3, verbose_name = 'Is a System Owner?', choices = IS_SYSTEM_OWNER_CHOICES, default='N') #this is just a flag to say they own a system 
worksFor = models.CharField (max_length = 70, verbose_name = 'Works For', blank = True, null = True) 
tradeType = models.ForeignKey(Contact_Trade, blank=True, null=True, verbose_name='Trade') 
emailAddress = models.EmailField(verbose_name = 'Email Address', blank = True, null = True) 

billingAddress = models.CharField(max_length = 150, verbose_name = 'Billing Address', blank=True, null=True) 
billingCity = models.CharField(max_length = 90, verbose_name = 'Billing City', blank=True, null=True) 
billingProvince = models.CharField(max_length = 30, verbose_name = 'Billing Province', blank=True, null=True) 
billingPostalCode = models.CharField(max_length = 10, verbose_name = 'Billing Postal Code', blank=True, null=True) 
snailMailOnly = models.CharField(max_length = 3, verbose_name = 'Snail Mail Only?', choices = SNAIL_MAIL_CHOICES, default='Y') 
snailMailInvoice = models.CharField(max_length = 3, verbose_name = 'Snail Mail Invoice?', choices = SNAIL_MAIL_INVOICE_CHOICES, default='Y') 
+0

Postez le code correspondant à votre contact.get_snailMailInvoice_display. Le problème est probablement là. – DTing

+0

@DTing - a ajouté tout le modèle 'contact'. Vous ne savez pas quoi d'autre vous cherchez. le 'get_FOO_display' est un tag Django standard. – Garfonzo

+0

Désolé pour ça, un peu rouillé sur mon django. Essayez certainement la suggestion de Chris Pratt, mais avez-vous essayé de remplacer SNAIL_MAIL_INVOICE_CHOICES par SNAIL_MAIL_CHOICES dans votre modèle et de voir ce qui se passe après le redémarrage? D'un côté, DEFAULT_Y_N_CHOICES au lieu de tous ces choix "différents" pourrait être quelque chose à considérer? – DTing

Répondre

0

OK - Je l'ai compris.

Je me suis rendu compte qu'il y avait quelque chose lié au fait que dans mon fichier CSV, le champ snailMailInvoice est le champ LAST sur chaque ligne. Ainsi, à la fin de la ligne, il y a un retour chariot. J'ai supposé que c'était un \n - ainsi dans ma commande de MySQL pour importer le CSV, j'indique terminated by '\n'. Cependant, MySQL a ramassé un '\ r' sur CHAQUE ligne et l'ajoutait au champ snailMailInvoice. Ainsi, chaque enregistrement a un Y ou un N avec un \r attaché.

J'ai modifié ma déclaration d'importation MySQL pour avoir: lines terminated with '\r\n' Maintenant, tout fonctionne comme prévu.

Leçon apprise.

Merci pour l'aide.

0

Il n'y a aucune raison pour que basé sur le code que vous avez posté. Est-ce que 'Y' et 'N' affichaient les valeurs pour SNAIL_MAIL_CHOICES en un point? Il est possible que votre serveur Web ne tire pas le code le plus récent.

Si vous êtes en développement, essayez de supprimer runserver (CTRL + C) et redémarrez-le.

Si vous êtes en production, redémarrez votre serveur Web et le processus (le cas échéant) auquel il est assigné, tel que uwsgi.

Vous pouvez également essayer de supprimer tous les fichiers *.pyc qui traînent dans votre projet. Méthode rapide et facile dans * shell nix est (à partir de votre répertoire de projet):

$ find . -name="*.pyc" -exec rm {}\; 
+0

Non, les choix ont toujours été Oui et Non. J'ai redémarré le serveur de test (pas encore en production) et il n'y a pas de changement. Je dois dire que je suis déconcerté! – Garfonzo

+0

S'il vous plaît essayez ce que recommande Chris Pratt. Le redémarrage du serveur ne supprime pas les fichiers .pyc précompilés. –

+0

Je devrais avoir mentionné que j'ai également supprimé les fichiers .pyc et il n'y a pas de changement - je reçois toujours le 'Y' ou' N' - pas oui ou non – Garfonzo

Questions connexes