Django получить идентификатор из модели

Как я могу получить id из только что созданной модели, чтобы его можно было использовать в колонке item_name. Я думал о чем-нибудь вроде этого:

class Items(models.Model):
    item_id = models.AutoField(primary_key=True)
    item_name = models.CharField(
        max_length=100, default="Item #{}".format(item_id)
    )

вы можете использовать в вызываемом по умолчанию объекте, что-то вроде функции, но не лямбду:

set_name(obj):
    return f'Item #{obj}'  # this is not work for new object

class Items(models.Model):
    # item_id = models.AutoField(primary_key=True) you dont need it, it will be created automatically
     item_name = models.CharField(
        max_length=100, default=set_name.format(item_id)
    )

Одна проблема - это не работает для нового объекта, вы всегда будете получать None. Но ваш item_name является статическим, поэтому вы можете сделать свойство, например:

class Items(models.Model):
    # item_id = models.AutoField(primary_key=True) you don't need it, it will be created automatically
     name = models.CharField(
        max_length=100, null=false, blank=true, default='')
     
     @property         
     def item_name(self):
         return f'{self.name or 'Item'} #{self.pk or "New object"}'

Другая возможность - отменить __str__ или __repr__:

class Items(models.Model):
    # item_id you don't need it, it will be created automatically
    # item_name you don't need it too

    def __str__(self):
        return  f'Item #{self.pk}'

    def __repr__(self):
        return f'{self}'

    @property         
    def item_name(self):
        return f'{self}'
Вернуться на верх