My model looks like this:
class Staff(models.Model): StaffNumber = models.CharField(max_length=20,primary_key=True) NameFirst = models.CharField(max_length=30,blank=True,null=True) NameLast = models.CharField(max_length=30) SchoolID = models.CharField(max_length=10,blank=True,null=True) AutocompleteName = models.CharField(max_length=100, blank=True,null=True)
I'm using MySQL, in case that matters.
From the manage.py shell:
root@django:/var/www/django-sites/apps# python manage.py shell Python 2.5.2 (r252:60911, Jan 20 2010, 21:48:48) [GCC 4.2.4 (Ubuntu 4.2.4-1ubuntu3)] on linux2 Type "help", "copyright", "credits" or "license" for more information. (InteractiveConsole) >>> from disciplineform.models import Staff >>> s = Staff.objects.all() >>> len(s) 406
So I know there are 406 "Staff" objects in there. I can also see them in the database. I check one of the values:
>>> s.NameFirst u'"ANDREA"'
That also matches what I see in the database. Now I try to 'get' this object.
>>> a = Staff.objects.get(NameFirst='ANDREA') Traceback (most recent call last): File "<console>", line 1, in <module> File "/var/lib/python-support/python2.5/django/db/models/manager.py", line 93, in get return self.get_query_set().get(*args, **kwargs) File "/var/lib/python-support/python2.5/django/db/models/query.py", line 309, in get % self.model._meta.object_name) DoesNotExist: Staff matching query does not exist.
Huh? This is happening for all the values of all the columns I've tested. I'm getting the same result in my view.py code.
I'm obviously doing something dumb. What is it?
a = Staff.objects.get(NameFirst=u'"ANDREA"')
u tells Python/Django it's a Unicode string, not a plain old
str, and in your
s.NameFirst sample, it's showing the value as containing double quotes.
Name was stored in database with an extra redundant doublequotes. So, if you want to catch that record, correct code is:
a = Staff.objects.get(NameFirst='"ANDREA"')
a = Staff.objects.get(NameFirst='ANDREA')
If you can't be sure, that query will return result, you must to add exception handling, something like that:
try: a = Staff.objects.get(NameFirst='"ANDREA"') except Exception: a = None