Opened 10 years ago
Closed 10 years ago
#25143 closed Bug (fixed)
ArrayField should implement from_db_value()
| Reported by: | Odahi | Owned by: | |
|---|---|---|---|
| Component: | contrib.postgres | Version: | 1.8 |
| Severity: | Normal | Keywords: | |
| Cc: | Triage Stage: | Accepted | |
| Has patch: | yes | Needs documentation: | no |
| Needs tests: | no | Patch needs improvement: | yes |
| Easy pickings: | no | UI/UX: | no |
Description (last modified by )
I'm using a custom field with the new Postgres ArrayField:
class Tag(object):
def __init__(self, id):
self.id = id
def __unicode__(self):
return U"Tag(%d)" % self.id
class TagField(models.SmallIntegerField):
# Dummy wrapper over SmallIntegerField.
def from_db_value(self, value, expression, connection, context):
if value is None:
return value
return Tag(int(value))
def get_prep_value(self, value):
return value
...
# models.py
class Recommendation(models.Model):
tags = ArrayField(TagField(), size=3)
def __unicode__(self):
return self.tags
Then
>>> Recommendation.objects.create(tags=[Tag(1), Tag(2)]) >>> Recommendation.objects.all() [<Recommendation: [1, 2]>] # WRONG
This is wrong because I got Integers instead of Tag objects:
[<Recommendation: [Tag(1), Tag(2)]>] # OK
Looking at the ArrayField source code seems that to_python() is implemented but never called. I think from_db_value() should be also implemented.
Change History (11)
comment:1 by , 10 years ago
| Description: | modified (diff) |
|---|
follow-up: 3 comment:2 by , 10 years ago
comment:3 by , 10 years ago
Replying to timgraham:
Can you propose a patch and regression test?
Hello Tim, never did it before, but I think I can submit a tentative patch & test for this in the next days. I'll try.
comment:4 by , 10 years ago
| Has patch: | set |
|---|
I've just added a tentative patch. https://github.com/Odahi/django/tree/ticket_25143
Would be great if someone can check it.
comment:5 by , 10 years ago
| Triage Stage: | Unreviewed → Accepted |
|---|
comment:6 by , 10 years ago
| Patch needs improvement: | set |
|---|
comment:7 by , 10 years ago
See #25579 for a related issue (querying on complex types) that could be fixed along with this.
comment:9 by , 10 years ago
| Triage Stage: | Accepted → Ready for checkin |
|---|
comment:10 by , 10 years ago
| Patch needs improvement: | set |
|---|---|
| Triage Stage: | Ready for checkin → Accepted |
Can you propose a patch and regression test?