Упорядочивание коллизий при клонировании Django Model

Я сталкиваюсь с проблемами, когда клонирую список продуктов пользователя с m2m-отношением на groceryitems.

def make_clone_for_update(self, user):
    clone = super().make_clone_for_update(user)
    for b in self.grocerylist_set.all():
        b.pk = None
        b.user_id = clone.uuid
        b.order = self.get_max_default("order")
        b.save()

def get_max_default(self, field):
    try:
        max = (
            self.__class__.objects.all().aggregate(Max(field))[f"{field}__max"] + 1
        )
    except TypeError:
        max = 1
    return max

После клонирования, если я проверю базу данных, у меня будет что-то, что будет иметь все продукты, клонированные, но иногда будут дублирующиеся значения заказа. Например, мы получим значения заказов, которые выглядят как

Яблоко 11 Груша 11 Апельсин 12 Гранола 12 Йогурт 13

В админке django я использую adminsortable2, который настоятельно рекомендует не использовать уникальное ограничение на поле заказа. Я также пробовал не использовать get max по умолчанию, а просто клонировать точное поле заказа, но это приводит к той же проблеме дублирования (но с меньшим номером заказа). Есть ли способ гарантировать уникальность этих полей заказа?

Вернуться на верх