Django, пользовательские поля с автоматическим увеличением символов
Я новичок в Django, с этим методом я хочу настроить его на генерацию кода элемента в качестве первичного ключа, вот так:
PC.202202.001
- PC => первичный ключ в
item_categoryмодели - 202202 => год & месяц
- 001 => автоинкременты
Теперь, мой вопрос в том, как получить объект/значение ForeignKey поля на основе выбранных данных в переменную? Таким образом, это будет изменять PrimaryKey в поле generate_code каждый раз, когда добавляются новые данные.
Также, как правильно сделать автоинкремент? Потому что сейчас я просто использую кверисет .count()
Вот моя модель:
class item_category(models.Model):
id_item = models.CharField(primary_key=True, max_length=5, unique=True)
name_item = models.CharField(max_length=150)
def __str__(self):
return self.name_item
def auto_increment():
last_item_code = item_code.objects.all().last()
total_item = item_code.objects.all().count() + 1
join_dates = datetime.now().strftime('%Y%m.')
if not last_kode_barang:
return 'NB.' + str(join_dates) + '00' + str(total_item)
else:
item_cat_id = last_kode_barang.id_item_category + '.'
new_item_id = str(kat_barang_id + join_dates + '00' + str(total_item))
if total_barang >= 10:
new_barang_id = str(kat_barang_id + join_dates + '0' + str(total_barang))
return new_item_id
class item_code(models.Model):
id_item_category = models.ForeignKey(kategori_barang, on_delete=models.CASCADE, db_column='id_barang')
generate_code = models.CharField(primary_key=True, editable=False, default=auto_increment, max_length=20)
Хм. Я думаю, что самым простым способом будет использование @property. Мне трудно понять, что именно вы ищете, но вот общий пример
class MyModel(models.Model):
created_at = models.DateTimeField(False, True, editable=False)
product_id = models.AutoField(primary_key=True)
@property
def generated_code(self):
return f"PC.{self.created_at}.{self.product_id}"
Несомненно, вам нужно еще поработать над форматированием и факторизацией, но это должно стать отправной точкой.