Opened 7 years ago
Closed 7 years ago
#29388 closed Bug (invalid)
JSONField defaults to empty list gets modified
Reported by: | Ponytech | Owned by: | |
---|---|---|---|
Component: | contrib.postgres | Version: | 2.0 |
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
Consider this simple model :
from django.db import models from django.contrib.postgres.fields import JSONField class Thing(models.Model): name = models.CharField(max_length=100) features = JSONField(default=[], blank=True)
And this code snippet :
>>> t1 = Thing.objects.create(name="thing 1") >>> t1.features.append({"f1": 42, "f2": 56}) >>> t1.features [{'f1': 42, 'f2': 56}] >>> t1.save() >>> t2 = Thing.objects.create(name="thing 2") >>> t2.features [{'f1': 42, 'f2': 56}]
I'd expect t2 features to be an empty list.
My guess is the model default fields gets modified somehow.
Note:
See TracTickets
for help on using tickets.
You've hit Python mutable default problem. Instead of defining mutable default
[]
use callable as defaultlist
in this particular case.See TicketClosingReasons/UseSupportChannels for further information