Fixed #11194 -- Corrected loading of Proxy models from fixtures (and, by extension, save_base(raw=True) for Proxy models).

git-svn-id: http://code.djangoproject.com/svn/django/trunk@10955 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
Russell Keith-Magee 2009-06-08 13:35:39 +00:00
parent 81aedbd157
commit 031385e4cc
3 changed files with 26 additions and 1 deletions

View File

@ -435,7 +435,9 @@ class Model(object):
# That means that we don't try to be smart about saving attributes # That means that we don't try to be smart about saving attributes
# that might have come from the parent class - we just save the # that might have come from the parent class - we just save the
# attributes we have been given to the class we have been given. # attributes we have been given to the class we have been given.
if not raw: # We also go through this process to defer the save of proxy objects
# to their actual underlying model.
if not raw or meta.proxy:
if meta.proxy: if meta.proxy:
org = cls org = cls
else: else:

View File

@ -0,0 +1,9 @@
[
{
"pk": 100,
"model": "proxy_models.myperson",
"fields": {
"name": "Elvis Presley"
}
}
]

View File

@ -286,6 +286,13 @@ MyPerson post save
MyPersonProxy pre save MyPersonProxy pre save
MyPersonProxy post save MyPersonProxy post save
>>> signals.pre_save.disconnect(h1, sender=MyPerson)
>>> signals.post_save.disconnect(h2, sender=MyPerson)
>>> signals.pre_save.disconnect(h3, sender=Person)
>>> signals.post_save.disconnect(h4, sender=Person)
>>> signals.pre_save.disconnect(h5, sender=MyPersonProxy)
>>> signals.post_save.disconnect(h6, sender=MyPersonProxy)
# A proxy has the same content type as the model it is proxying for (at the # A proxy has the same content type as the model it is proxying for (at the
# storage level, it is meant to be essentially indistinguishable). # storage level, it is meant to be essentially indistinguishable).
>>> ctype = ContentType.objects.get_for_model >>> ctype = ContentType.objects.get_for_model
@ -354,4 +361,11 @@ True
# Select related + filter on a related proxy of proxy field # Select related + filter on a related proxy of proxy field
>>> ProxyImprovement.objects.select_related().get(associated_bug__summary__icontains='fix') >>> ProxyImprovement.objects.select_related().get(associated_bug__summary__icontains='fix')
<ProxyImprovement: ProxyImprovement:improve that> <ProxyImprovement: ProxyImprovement:improve that>
Proxy models can be loaded from fixtures (Regression for #11194)
>>> from django.core import management
>>> management.call_command('loaddata', 'mypeople.json', verbosity=0)
>>> MyPerson.objects.get(pk=100)
<MyPerson: Elvis Presley>
"""} """}