Установите уникальный первичный ключ на основе внешнего ключа

У меня есть модель, определенная как -

class sales_order(models.Model):
    customer=models.ForeignKey()
    item=models.ForeignKey()
    branch=models.ForeignKey()
    ---
    ---other fields

Теперь для каждой ветки я хочу начать первичный ключ с 1 ("id", например), но функциональность Django по умолчанию будет увеличивать id независимо от любых других данных.

Я не против, даже если id будет продолжать увеличиваться, как это происходит, и тогда я устанавливаю свое собственное поле, делая его уникальным для каждого филиала, и это поле должно автоматически увеличиваться без передачи данных пользователем, проверяя предыдущее значение из базы данных, например -

class order_serializer(serializers.ModelSerializer):
    class Meta:
        validators = [
            UniqueTogetherValidator(
                queryset=sales_order.objects.all(),
                fields=['myOwnDefinedField', 'branch']
            )
        ]

Я не представляю, как этого добиться. Использую Django 3.1.5.

Есть помощь?

from django.db.models.functions import Coalesce

class SalesOrder(models.Model):
    branch = models.ForeignKey(Branch, on_delete=models.CASCADE)
    branch_unique_id = models.IntegerField(editable=False, blank=True)

    class Meta:
        unique_together = (
            ('branch', 'branch_unique_id'),
        )

    def save(self, *args, **kwargs):
        if not self.branch_unique_id:
            self.branch_unique_id = SalesOrder.objects.filter(
                branch=self.branch
            ).aggregate(
                max=Coalesce(models.Max('branch_unique_id'), 0)
            )['max'] + 1
        super().save(*args, **kwargs)
Вернуться на верх