Opened 8 years ago
Last modified 8 years ago
#28253 closed Bug
Integrity error in get_or_create — at Version 1
| Reported by: | Anuranjit maindola | Owned by: | Anuranjit maindola |
|---|---|---|---|
| Component: | Database layer (models, ORM) | Version: | 1.11 |
| 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 )
I came across an issue. Consider a code example below
class Config(models.Model):
key = models.CharField(max_length=100)
value = models.CharField(max_length=100)
def save(self, *args, **kwargs):
super(Config, self).save(*args, **kwargs)
super(Config, self).save(*args, **kwargs)
Now if for the Above model I do
params = {"key":"1", "value": "2"}
obj, created = Config.objects.get_or_create(**params)
I get an Integrity Error for Primary Key i.e. the database id field.
The issue as i understood comes because Django tries to insert again with duplicate Primary key. In get_or_create the create method is called with force_insert=True and a particular check in _save_table fails (line number 897) . (If this check passes django is supposed to do an update).
# If possible, try an UPDATE. If that doesn't update anything, do an INSERT.
if pk_set and not force_insert:
Note:
See TracTickets
for help on using tickets.
What's the reason for calling
super().save()twice?