Django: настраиваемый первичный ключ на основе шаблона формы

У меня следующая модель:

UNIT = (("pounds","pounds"),("pcs","pcs"),("kg","kg"),("g","g"))

CATEGORIES = (("finished good","finished good"),("raw material","raw material"))


class Product_Hierarchy(models.Model):
    
    product_code = models.CharField(max_length=100, primary_key=True)
    parent_product_code = models.ForeignKey("self",on_delete=models.CASCADE)
    product_name = models.CharField(max_length=100)             
    product_category = models.CharField(max_length=100,choices=CATEGORIES, default="finished good")
    stock_on_hand = models.FloatField(max_length=1000000)
    unit = models.CharField(max_length=100, choices = UNIT, default="pcs")

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

Поскольку создание продукта происходит в двух шаблонах: шаблон регистрации готового товара и другой шаблон регистрации сырья. Мне интересно, могу ли я написать что-то, что определяет, откуда происходит обращение к модели, и автоматически генерирует код, соответствующий категории

Вот как выглядит моя форма:

CATEGORY_CHOICES = [
      ('finished good', 'finished good'),('raw material', 'raw material'),
]
UNIT = [("pounds","pounds"),("pcs","pcs"),("kg","kg"),("g","g")]

           
class UpdateProductForm(forms.ModelForm):
      product_category = forms.CharField(widget=forms.Select(choices=CATEGORY_CHOICES), label='Category')
      product_name = forms.CharField(label = 'Product Name')
      stock_on_hand = forms.CharField(label = 'Stock On Hand')
      unit = forms.CharField(widget=forms.Select(choices=UNIT), label='Unit')

      class Meta:
            model = Product_Hierarchy
            fields = ("product_name", "product_category", "stock_on_hand", "unit")

Я пока не нашел способа сделать это, документация не охватывает это, а мои навыки даже близко не позволяют мне создать это с нуля. Может кто-нибудь подскажет, как это сделать или где искать?

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