Django Как присоединить внешний ключ, связанный с несколькими моделями, к отправке одной формы

Как можно создать набор инлайн-форм, которые имеют один и тот же внешний ключ, используя функциональные базовые представления. Я не хочу постоянно выбирать название товара (которое является FK для других форм), потому что я использую две формы, связанные с одним внешним ключом#

я хочу реализовать это https://www.letscodemore.com/blog/django-inline-formset-factory-with-examples/ в представлениях базы функций

У меня есть эти 3 модели

#product model

class Product(models.Model): 
    title = models.CharField(max_length=150) 
    short_description = models.TextField(max_length=100)

    def __str__(self):
        return self.title

*Image model*
class Image(models.Model): 
    product = models.ForeignKey(Product, on_delete=models.CASCADE, null=True) 
    image = models.ImageField(blank=True, upload_to='images')
    
    def __str__(self):
        return self.product.title


*variant model*
class Variant(models.Model):
     
    product = models.ForeignKey( Product, on_delete=models.CASCADE) 
    size = models.CharField(max_length=100) 
    quantity = models.PositiveIntegerField(default=1) 
    price = models.DecimalField(max_digits=12, decimal_places=2)


    def __str__(self):
        return self.product.title

Forms

**Forms**
from django import forms from 
django.forms import inlineformset_factory

from .models import ( Product, Image, Variant)

class ProductForm(forms.ModelForm):

class Meta:
    model = Product
    fields = '__all__'
    widgets = {
            'title': forms.TextInput(
            attrs={ 'class': 'form-control'} ), 'short_description': forms.TextInput(
            attrs={'class': 'form-control'}),
    }

class ImageForm(forms.ModelForm):

class Meta:
    model = Image
    fields = '__all__'


class VariantForm(forms.ModelForm):

class Meta:
    model = Variant
    fields = '__all__'
    widgets = {
        'size': forms.TextInput(attrs={'class': 'form-control'} ),
        'quantity': forms.NumberInput(attrs={'class': 'form-control'}),
        'price': forms.NumberInput(attrs={ 'class': 'form-control'}),
    }


VariantFormSet = inlineformset_factory( Product, Variant, form=VariantForm, extra=1, can_delete=True, can_delete_extra=True ) 

ImageFormSet = inlineformset_factory( Product, Image, form=ImageForm,extra=1, can_delete=True, can_delete_extra=True )

Что я пробовал

**Views**
from django.shortcuts import render, redirect 
from django.contrib import messages 
from .forms import (ProductForm, VariantFormSet, ImageFormSet) 
from .models import (Image, Product, Variant)

#create product
def create_product(request):
    
    if method.request == 'POST': 
        form = ProductForm(request.POST)
        if form.is valid():
              form.save()
        else: form = ProductForm() 
    return redirect('product:products')

Что я пробовал

Прикрепить изображение и вариант к товару

при отправке этой формы, VariantForm должен получить FK (поле названия товара) из FK ImageForm, который уже выбран в шаблоне django


#Attach  product image and variation to product
def add_image_and_variant(request):
    
    if method.request == 'POST': 
        
        image_form = ImageForm(request.POST,request == 'FILES') 
        var_form = VariantForm(request.POST)
        if image_form.is valid() and var_form():
            
            image_instance =image_form.save()
            var = var_form(commit = False)
            var.title=  image_instance
            var.save()
        else: 
            image_form = ImageForm() 
            var_form = VariantForm() 
        return redirect('product:products')
    return render(request,'product_var.html',{'image_form':image_form,:var_form})

Форма 1

{{ form.as_p}}

форма 2

{{image.form.as_p}}

{{var_form.as_p}}

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