Opened 9 years ago
Last modified 9 years ago
#25143 closed Bug
ArrayField should implement from_db_value() — at Version 1
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.
Note:
See TracTickets
for help on using tickets.