Opened 3 years ago
Last modified 3 years ago
#34444 closed Bug
Summing through a One-to-Many relationship on the property of a JSONField fails — at Version 1
| Reported by: | Clément Escolano | Owned by: | nobody |
|---|---|---|---|
| Component: | Database layer (models, ORM) | Version: | 4.1 |
| Severity: | Normal | Keywords: | |
| Cc: | Triage Stage: | Unreviewed | |
| Has patch: | no | Needs documentation: | no |
| Needs tests: | no | Patch needs improvement: | no |
| Easy pickings: | no | UI/UX: | no |
Description (last modified by )
Hello,
When summing through a One-to-Many relationship on the property of a JSONField, there is the following error
TypeError: the JSON object must be str, bytes or bytearray, not int
To reproduce the error, you can create a model that is linked to another model with a JSONField:
class Group(models.Model):
name = models.TextField()
class Membership(models.Model):
group = models.ForeignKey(Group, related_name="memberships")
extra = models.JSONField()
Then create a group and a membership with an amount in the JSONField:
group = Group.objects.create(name="Test")
Membership.objects.create(group=group, extra={"amount": 5})
Finally, a request is made to sum the amount property for every group:
groups = Group.objects.annotate(total=Sum("memberships__extra__amount")).all()
groups[0].total
The SQL query is correct and returns the right information but accessing the data raises the error
TypeError: the JSON object must be str, bytes or bytearray, not int
Note:
See TracTickets
for help on using tickets.