#14518: Field.to_python not called on foreign key IDs
-------------------------------------+-------------------------------------
Reporter: wolever | Owner: nobody
Type: Bug | Status: new
Component: Database layer | Version: 1.2
(models, ORM) | Resolution:
Severity: Normal | Triage Stage: Accepted
Keywords: | Needs documentation: 0
Has patch: 0 | Patch needs improvement: 0
Needs tests: 0 | UI/UX: 0
Easy pickings: 0 |
-------------------------------------+-------------------------------------
Comment (by anubhav9042):
Well there have been some changes in the code and some things have
changed.
Here is my models.py
{{{
from django.db import models
class MyField(models.CharField):
__metaclass__ = models.SubfieldBase
def __init__(self, *args, **kwargs):
super(MyField, self).__init__(*args, **kwargs)
def to_python(self, value):
return "Value: %s" % value
class Foo(models.Model):
field = MyField(max_length=30, primary_key=True)
class Bar(models.Model):
foo = models.ForeignKey(Foo)
}}}
In shell, I get correct values here:
{{{
>>> m1 = Foo.objects.create(field="anubhavjoshi")
>>> m2 = Bar.objects.create(foo=m1)
>>> m2.foo_id
u'Value: Value: anubhavjoshi'
>>> m2.foo.field
u'Value: Value: anubhavjoshi'
}}}
But if I do:
{{{
>>> m1 = Foo.objects.create(field="anubhavjoshi")
>>> m2 = Bar.objects.create(foo=m1)
>>> m2 = Bar.objects.all()[0]
>>> m2.foo_id
u'Value: Value: anubhavjoshi'
>>> m2.foo.field
DoesNotExist: Foo matching query does not exist.
>>> m2.foo
DoesNotExist: Foo matching query does not exist.
}}}
Following traceback:
{{{
---------------------------------------------------------------------------
DoesNotExist Traceback (most recent call
last)
C:\Users\Anubhav\DjangoDev\apps\<ipython-input-7-3a4a21c18010> in
<module>()
----> 1 m2.foo
c:\users\anubhav\django\django\db\models\fields\related.pyc in
__get__(self, instance, instance_type)
562 qs = qs.filter(extra_filter, **params)
563 # Assuming the database enforces foreign keys,
this won't fail.
--> 564 rel_obj = qs.get()
565 if not self.field.rel.multiple:
566 setattr(rel_obj,
self.field.related.get_cache_name(), instance)
c:\users\anubhav\django\django\db\models\query.pyc in get(self, *args,
**kwargs)
374 raise self.model.DoesNotExist(
375 "%s matching query does not exist." %
--> 376 self.model._meta.object_name)
377 raise self.model.MultipleObjectsReturned(
378 "get() returned more than one %s -- it returned %s!" %
(
}}}
--
Ticket URL: <https://code.djangoproject.com/ticket/14518#comment:7>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
--
You received this message because you are subscribed to the Google Groups
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/django-updates/065.a8e14afad37a7bf1825708bbd711456f%40djangoproject.com.
For more options, visit https://groups.google.com/d/optout.