Opened 14 years ago
Closed 14 years ago
#17717 closed Bug (fixed)
django.core.serializers.serialize doesn't deal with proxy models
| Reported by: | lakin | Owned by: | nobody |
|---|---|---|---|
| Component: | Core (Serialization) | Version: | 1.1 |
| Severity: | Normal | Keywords: | |
| Cc: | anssi.kaariainen@…, charette.s@… | Triage Stage: | Ready for checkin |
| Has patch: | yes | Needs documentation: | no |
| Needs tests: | no | Patch needs improvement: | no |
| Easy pickings: | no | UI/UX: | no |
Description
If you try to serialize a proxy=True model - you get no fields serialized.
I wish I had more time to make a test case, but I don't at the moment. The easy test case is to make a model, make another model that proxies to the original model. Insert a row of data, and then serialize an instance of both models to see that the proxy one is empty.
Marking it as 1.1 as that is what I'm using and I haven't had time to double check the other versions.
Attachments (3)
Change History (12)
by , 14 years ago
| Attachment: | 17717-test.diff added |
|---|
comment:1 by , 14 years ago
| Triage Stage: | Unreviewed → Accepted |
|---|
comment:2 by , 14 years ago
| Cc: | added |
|---|---|
| Has patch: | set |
In the attached patch the concrete_model._meta.local_fields are used to find out the fields to dump instead of obj._meta.local_fields.
by , 14 years ago
| Attachment: | 17717.diff added |
|---|
comment:5 by , 14 years ago
Now that there's a concrete_model property and that proxy_for_model is actually a proxy chain we should probably just get it from there?
Correct me if I'm wrong but the patch checked in r17640 will fail for proxy of a proxy model.
Should the patch be checked out and corrected with additional tests?
edit: I meant concrete_model and not concrete_class
comment:6 by , 14 years ago
| Cc: | added |
|---|
comment:7 by , 14 years ago
| Resolution: | fixed |
|---|---|
| Status: | closed → reopened |
| Triage Stage: | Ready for checkin → Accepted |
Oh, yeah, I didn't see the changes done in r17573, this new "concrete_model" property might indeed fix this easier. Re-opening..
by , 14 years ago
| Attachment: | ticket-17717-proxy-model-serializers.diff added |
|---|
Make sure to rely on newly introduced concrete_model model option
comment:8 by , 14 years ago
| Triage Stage: | Accepted → Ready for checkin |
|---|
Yes, that should be fixed. Now proxy_for_model is the actual proxied model, so as written the committed patch isn't correct any more. That is my failing, as I should have written it using the while opts._proxy_for_model: opts = opts._proxy_for_model._meta idiom instead of assuming the buggy behavior in the patch.
I tested the patch and without the fix the added test fails, with the fix in the patch it succeeds. I quickly skimmed through it and it seems ready for checkin to me.
Test showing bug