1

我有一堆字段的模型。其中兩個領域有選擇。他們是這樣的:Django - 選擇字段顯示鍵,而不是值

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

當我表現出Django模板這兩個值,我這樣做是這樣的:

<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> 

的問題是,雖然第一場snailMailOnly顯示器的選擇YesNo正確,第二個字段snailMailInvoice只顯示YN

我在這裏做錯了什麼?

感謝

編輯 - 增加接觸模型代碼:

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

發佈contact.get_snailMailInvoice_display的代碼。問題可能在那裏。 – DTing

+0

@Ding - 添加了整個「聯繫人」模型。不知道你在找什麼。 'get_FOO_display'是一個標準的Django標籤。 – Garfonzo

+0

對不起,在我的django上有點生疏。肯定地嘗試克里斯普拉特的建議,但你有沒有嘗試用你的模板中的SNAIL_MAIL_CHOICES替換SNAIL_MAIL_INVOICE_CHOICES並查看重啓後會發生什麼?在附註中,DEFAULT_Y_N_CHOICES而不是所有那些「不同」的選擇可能需要考慮? – DTing

回答

0

好的 - 我想通了。

我意識到有一件事與我的CSV文件中的snailMailInvoice字段是每行上的LAST字段有關。因此,在行的末尾有一個回車。我認爲這是一個\n - 因此在我的MySQL命令導入CSV,我國terminated by '\n'

但是,MySQL在每行上都選取了'\ r',並將其添加到snailMailInvoice字段中。因此,每個記錄都有一個Y或一個N\r附加。

我修改了我的MySQL導入語句:lines terminated with '\r\n'現在一切都按預期工作。

經驗教訓。

感謝您的幫助。

0

沒有理由爲根據您發佈的代碼。 「Y」和「N」在一個點上的顯示值爲SNAIL_MAIL_CHOICES?您的Web服務器可能不會拉取最近的代碼。

如果您正在開發中,請嘗試殺死runserver(CTRL + C)並重新啓動它。

如果您正在生產,請重新啓動您的網絡服務器它所代理的進程(如果有的話),如uwsgi。

您還可以嘗試刪除任何在您的項目中放置的*.pyc文件。 * nix外殼中的快速簡單的方法是(從您的項目目錄):

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

不,選項一直是「是」和「否」。我重新啓動了測試服務器(尚未投入生產),沒有任何變化。我必須說我很困惑! – Garfonzo

+0

請嘗試Chris Pratt的建議。重新啓動服務器不會刪除預編譯的.pyc文件。 –

+0

我應該提到我也刪除了.pyc文件並且沒有變化 - 我仍然得到'Y'或'N' - 不是或不是。 – Garfonzo

相關問題