Упорядочивание коллизий при клонировании 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 по умолчанию, а просто клонировать точное поле заказа, но это приводит к той же проблеме дублирования (но с меньшим номером заказа). Есть ли способ гарантировать уникальность этих полей заказа?