How to bulk increment a unique IntegerField?

Viewed 86

How can I bulk increment an IntegerField that has a unique constraint?

For example:

class Rank(models.Model):
    level = models.IntegerField(unique=True)

>> Rank.objects.create(level=1)
>> Rank.objects.create(level=2)
>> Rank.objects.create(level=3)

>> Rank.objects.all().update(level=F('level')+1)
django.db.utils.IntegrityError: (1062, "Duplicate entry '1' for key 'myapp_rank.level'")

The following query works fine in MySQL (assuming SQL_SAFE_UPDATES=0):

UPDATE myapp_rank t SET t.rank = t.rank + 1;

Is there a way to do this using the ORM?

0 Answers
Related