Увеличение id в родительской сущности в модели Django

У меня возникла проблема, когда у меня есть родительская модель User, которая связана один ко многим с другой моделью, скажем Device.

Я хочу сделать следующее: в каждом user я хочу создать и увеличить идентификатор для каждого device, которым он владеет.

Например, у пользователя A два устройства, поэтому его user_device_id будет 1 и 2. У пользователя B одно устройство, поэтому его user_device_id будет 1. И наоборот.

У меня есть текущее рабочее решение, но я ищу альтернативное решение.

В настоящее время реализована модель Device, которая переопределяет метод сохранения:

class Device(models.Model):

    user = models.ForeignKey(User, on_delete=models.CASCADE)
    user_device_id = models.PositiveIntegerField(default=0, null=false)

    def save(self, *args, **kwargs):
        try:
            within_user_device_id = Device.objects.filter(user=self.user).latest('user_device_id').user_device_id
            self.user_device_id = within_user_device_id + 1
        except Device.DoesNotExist:
            self.user_device_id = 1

Более аккуратный метод, на мой взгляд, создать функцию, которая получает текущий экземпляр user и использует значение по умолчанию в models.PositiveIntegerField для увеличения этого значения.

Проблема в том, что я не могу получить ссылку на текущий экземпляр и вызвать функцию в default.

class Device(models.Model):

    def increment_within_user_device_id(self):
        within_user_device_id = Device.objects.filter(user=self.user).latest('user_device_id').user_device_id
        if not within_user_device_id:
            return 1
        else:
            within_user_device_id += 1
            return within_user_device_id

    user = models.ForeignKey(User, on_delete=models.CASCADE)
    # I cannot pass the function in default
    user_device_id = models.PositiveIntegerField(default=increment_with_user_device_id(self), null=false)

Есть идеи?

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