Question

I have a model with a bunch of fields. Two of the fields have choices. They look like this:

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

When I show these two values in a Django Template, I do so like this:

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

The problem is that while the first field snailMailOnly display the choices Yes and No correctly, the second field snailMailInvoice ONLY shows Y and N.

What am I doing wrong here?

Thanks

EDIT -- adding contact model code:

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')
Was it helpful?

Solution 2

OK -- I figured it out.

I realised there was something connected with the fact that in my CSV file, the snailMailInvoice field is the LAST field on each line. Thus, at the end of the line there is a carriage return. I assumed that this was a \n -- thus in my MySQL command to import the CSV, I state terminated by '\n'.

However, the MySQL picked up a '\r' on EVERY line and was adding it to the snailMailInvoice field. Thus, every record has either a Y or a N with a \r attached.

I amended my MySQL import statement to have: lines terminated with '\r\n' Now everything is working as expected.

Lesson learned.

Thanks for the help.

OTHER TIPS

There's no reason for that based on the code you've posted. Were 'Y' and 'N' the display values for SNAIL_MAIL_CHOICES at one point? It's possible that your web server isn't pulling the most recent code.

If you're in development, try killing runserver (CTRL+C) and restarting it.

If you're in production, restart your webserver and the process (if any) it proxies to, such as uwsgi.

You can also try deleting any *.pyc files laying around in your project. Quick and easy method in *nix shell is (from your project directory):

$ find . -name="*.pyc" -exec rm {}\;
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top