Django динамически формирует

У меня есть следующее Мои модели:

# База товаров / Base products
class Products(models.Model):
    name = models.CharField(max_length=150, verbose_name='Название')

    def __str__(self):
        return self.name

    class Meta:
        ordering = ('name',)
        verbose_name = 'База товаров'
        verbose_name_plural = 'База товаров'

# Закупили / Base purchases
class Purchases_item(models.Model):
    product = models.ForeignKey(Products, on_delete=models.CASCADE, verbose_name='Товар')
    quantity = models.PositiveIntegerField(default=0, verbose_name='Кол-во')
    untils = models.ForeignKey(Untils, on_delete=models.CASCADE, verbose_name='Ед. измерения')
    price = models.DecimalField(max_digits=150, default=0, decimal_places=0, verbose_name='Цена себестоимости')
    total_price = models.DecimalField(max_digits=150, default=0, decimal_places=0, verbose_name='Общая сумма')
    
    def __str__(self):
        return str(self.product)

    def save(self, *args, **kwargs):
        super(Purchases_item, self).save(*args, **kwargs)
        val = self.price * self.quantity
        if self.total_price != val:
            self.total_price = self.price * self.quantity
            self.save()

    class Meta:
        ordering = ('product', 'price', 'total_price')
        verbose_name = 'Покупка по позициям'
        verbose_name_plural = 'Покупки по позициям'

# Список который мы закупили записываем на склад / Purchases List
# По факту это склад списком
class Purchases(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    date = models.DateField(auto_now_add=True, verbose_name='Дата') # переделать на defaul и отключить auto now add
    company = models.CharField(max_length=150, verbose_name='Компания', null=True, blank=True, default=None)
    product = models.ManyToManyField(Purchases_item, verbose_name='Товар(ы)')
    total_price = models.DecimalField(max_digits=150, decimal_places=0, verbose_name='Общая сумма', default=0)
    
    def __str__(self):
        return self.company

    def save(self, *args, **kwargs):
        super(Purchases, self).save(*args, **kwargs)
        if self.total_price != sum(product.total_price for product in self.product.all()):
            self.total_price = sum(product.total_price for product in self.product.all())
            self.save() 

    class Meta:
        ordering = ('date', 'company', 'total_price')
        verbose_name = 'Покупка список'
        verbose_name_plural = 'Покупки список'

Мои формы:

class ProductForm(ModelForm):
    class Meta:
        model = Products
        fields = ['name', 'category']

class PurchasesForm(ModelForm):
    class Meta:
        model = Purchases
        fields = ['user', 'company']
        widgets = {
            'user': Select(attrs={
                'class': "form-select",
                'placeholder': 'Название товара'
            }),
            'company': TextInput(attrs={
                'class': "form-select",
                'placeholder': 'Поставщик'
            }),
        }

class PurchasesItemForm(ModelForm):
    class Meta:
        model = Purchases_item
        fields = ['product', 'quantity', 'untils', 'price']
        widgets = {
            'product': Select(attrs={
                'class': "form-select",
                'placeholder': 'Название товара'
            }),
            'quantity': NumberInput(attrs={
                'class': "form-control",
                'placeholder': 'Кол-во'
            }),
            'untils': Select(attrs={
                'class': "form-select",
                'placeholder': 'Ед. измерения'
            }),
        }


PurchasesItemFormSet = modelformset_factory(
    Purchases_item, 
    fields = ("product", "quantity", "untils", "price", "total_price"), 
    widgets= {
        'product': Select(attrs={
            'class': "form-control form-select",
            'placeholder': 'Название товара'
        }),
        'quantity': NumberInput(attrs={
            'class': "form-control",
            'placeholder': 'Кол-во'
        }),
        'untils': Select(attrs={
            'class': "form-select",
            'placeholder': 'Ед. измерения'
        }),
        'price': NumberInput(attrs={
            'class': "form-control",
            'placeholder': 'Кол-во'
        }),
        'total_price': NumberInput(attrs={
            'class': "form-control",
            'placeholder': 'Кол-во'
        }),
    },
    extra = 1
)

Мое мнение:

# Создать закупку
class PurchasesCreate(View):
    model = Purchases

    context = {}

    def get(self, request, *args, **kwargs):
        self.context['form'] = PurchasesForm()
        self.context['formset'] = PurchasesItemFormSet(queryset = Purchases_item.objects.none())

        # self.context['product'] = Products.objects.all()
        # self.context['purchases_item'] = Purchases_item.objects.all()

        if self.request.user.is_authenticated == False:
            return redirect('login')
        else:
            return render(request, 'erp/purchases_create.html', self.context)
    
    def post(self, request, pk, *args, **kwargs):
        
        formset = PurchasesItemFormSet(data = self.request.POST)

        if formset.is_valid():
            formset.save()
            return redirect('/')

        self.context['user'] = Purchases.objects.get(id=pk)

        if self.request.user.is_authenticated == False:
            return redirect('login')
        else:
            return render(request, 'erp/purchases_create.html', self.context)

Суть проблемы в том, что у меня в модели Purchases есть "Many to many", строка "Row", и мне нужно, чтобы все это сохранялось и было динамическим, чтобы я мог выбрать

Пример на фото

Пример

Как сделать его динамическим и сохранить полученные данные в моделях "покупки" и "покупки товаров"?

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