If model field with name id is not automatic primary key:
class Smb(OrderedModel):
id = models.CharField(primary_key=True)
.id already present in this test (model.py):
def save(self, swapping=False, _args, *_kwargs):
if not self.id: ...
and .order still not defined, save fail.
SOLUTION (model.py):
class OrderedModel(models.Model):
order = models.IntegerField(blank=True, unique=True) # NOT PositiveInteger
def save(self, swapping=False, _args, *_kwargs):
if not self.order: # NOT self.id
try:
self.order = self.max_order() + 1
except IndexError:
self.order = 1 # -1 is a special index used in swap !!!!!
if self.order < 0 and not swapping: !!!! negative is a special index for swap
raise ValidationError("Can't set 'order' to 0")
super(OrderedModel, self).save(_args, *_kwargs)
def swap(cls, obj1, obj2):
tmp, obj2.order = obj2.order, -1 # !!!! negative is a special index for swap
....
it`s all.
If model field with name id is not automatic primary key:
class Smb(OrderedModel):
id = models.CharField(primary_key=True)
.id already present in this test (model.py):
def save(self, swapping=False, _args, *_kwargs):
if not self.id: ...
and .order still not defined, save fail.
SOLUTION (model.py):
class OrderedModel(models.Model):
order = models.IntegerField(blank=True, unique=True) # NOT PositiveInteger
def save(self, swapping=False, _args, *_kwargs):
if not self.order: # NOT self.id
try:
self.order = self.max_order() + 1
except IndexError:
self.order = 1 # -1 is a special index used in swap !!!!!
if self.order < 0 and not swapping: !!!! negative is a special index for swap
raise ValidationError("Can't set 'order' to 0")
super(OrderedModel, self).save(_args, *_kwargs)
def swap(cls, obj1, obj2):
tmp, obj2.order = obj2.order, -1 # !!!! negative is a special index for swap
....
it`s all.