Skip to content

Fail with not automatic primary key #3

@oscer

Description

@oscer

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions