Увеличение 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)
Есть идеи?