Fixed #11311 -- Reverted [10952], Refs #10785. Changeset [10952] caused problems with m2m relations between models that had non-integer primary keys. Thanks to Ronny for the report and test case.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@11007 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
parent
c98a46c2be
commit
b38cf5db5c
|
@ -132,13 +132,13 @@ class RelatedField(object):
|
||||||
v, field = getattr(v, v._meta.pk.name), v._meta.pk
|
v, field = getattr(v, v._meta.pk.name), v._meta.pk
|
||||||
except AttributeError:
|
except AttributeError:
|
||||||
pass
|
pass
|
||||||
if not field:
|
|
||||||
field = self.rel.get_related_field()
|
if field:
|
||||||
if lookup_type in ('range', 'in'):
|
if lookup_type in ('range', 'in'):
|
||||||
v = [v]
|
v = [v]
|
||||||
v = field.get_db_prep_lookup(lookup_type, v)
|
v = field.get_db_prep_lookup(lookup_type, v)
|
||||||
if isinstance(v, list):
|
if isinstance(v, list):
|
||||||
v = v[0]
|
v = v[0]
|
||||||
return v
|
return v
|
||||||
|
|
||||||
if hasattr(value, 'as_sql') or hasattr(value, '_as_sql'):
|
if hasattr(value, 'as_sql') or hasattr(value, '_as_sql'):
|
||||||
|
|
|
@ -136,11 +136,14 @@ Pass
|
||||||
# Regression for #10785 -- Custom fields can be used for primary keys.
|
# Regression for #10785 -- Custom fields can be used for primary keys.
|
||||||
>>> new_bar = Bar.objects.create()
|
>>> new_bar = Bar.objects.create()
|
||||||
>>> new_foo = Foo.objects.create(bar=new_bar)
|
>>> new_foo = Foo.objects.create(bar=new_bar)
|
||||||
>>> f = Foo.objects.get(bar=new_bar.pk)
|
|
||||||
>>> f == new_foo
|
# FIXME: This still doesn't work, but will require some changes in
|
||||||
True
|
# get_db_prep_lookup to fix it.
|
||||||
>>> f.bar == new_bar
|
# >>> f = Foo.objects.get(bar=new_bar.pk)
|
||||||
True
|
# >>> f == new_foo
|
||||||
|
# True
|
||||||
|
# >>> f.bar == new_bar
|
||||||
|
# True
|
||||||
|
|
||||||
>>> f = Foo.objects.get(bar=new_bar)
|
>>> f = Foo.objects.get(bar=new_bar)
|
||||||
>>> f == new_foo
|
>>> f == new_foo
|
||||||
|
|
|
@ -33,6 +33,14 @@ class SelfReferChild(SelfRefer):
|
||||||
class SelfReferChildSibling(SelfRefer):
|
class SelfReferChildSibling(SelfRefer):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
# Many-to-Many relation between models, where one of the PK's isn't an Autofield
|
||||||
|
class Line(models.Model):
|
||||||
|
name = models.CharField(max_length=100)
|
||||||
|
|
||||||
|
class Worksheet(models.Model):
|
||||||
|
id = models.CharField(primary_key=True, max_length=100)
|
||||||
|
lines = models.ManyToManyField(Line, blank=True, null=True)
|
||||||
|
|
||||||
__test__ = {"regressions": """
|
__test__ = {"regressions": """
|
||||||
# Multiple m2m references to the same model or a different model must be
|
# Multiple m2m references to the same model or a different model must be
|
||||||
# distinguished when accessing the relations through an instance attribute.
|
# distinguished when accessing the relations through an instance attribute.
|
||||||
|
@ -79,5 +87,11 @@ FieldError: Cannot resolve keyword 'porcupine' into field. Choices are: id, name
|
||||||
>>> sr_sibling.related.all()
|
>>> sr_sibling.related.all()
|
||||||
[<SelfRefer: Hanna>]
|
[<SelfRefer: Hanna>]
|
||||||
|
|
||||||
|
# Regression for #11311 - The primary key for models in a m2m relation
|
||||||
|
# doesn't have to be an AutoField
|
||||||
|
>>> w = Worksheet(id='abc')
|
||||||
|
>>> w.save()
|
||||||
|
>>> w.delete()
|
||||||
|
|
||||||
"""
|
"""
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue