Я хочу использовать модель внешнего ключа в качестве форм в Django forms

у меня есть две модели в django фермер и трактор, и я хочу использовать обе модели в одной форме на веб-странице, чтобы со всеми свойствами в качестве входных данных, такими как имя, телефон, email, id, цена и т.д.
. my models.py

class Farmer(models.Model):
    first_name = models.CharField(max_length=100)
    last_name = models.CharField(max_length=100)
    phone =models.CharField(max_length=10)
    address = models.TextField(max_length=200)
    email_address = models.EmailField()

    def full_name(self):
        return f"{self.first_name} {self.last_name}"

    def __str__(self):
        return self.full_name()


class Post(models.Model):
    tractor_price = models.IntegerField(max_length=150)
    implimentaion = models.CharField(max_length=50)
    purchase_date = models.DateField(auto_now=False)
    slug = models.SlugField(unique=True, db_index=True, null=True,blank=True)
    tractor_company = models.CharField(max_length=50)
    tractor_model = models.CharField(max_length=50)
    description = models.TextField(validators=[MinLengthValidator(10)])
    date = models.DateField(auto_now=False)
    farmer = models.ForeignKey(
        Farmer, on_delete=models.SET_NULL, null=True, related_name="posts")

forms.py

from .models import Post,Farmer

class TractorForm(ModelForm):
    class Meta:
        model = (Post,Farmer)
        fields = ("tractor_price","implimentaion","purchase_date","tractor_company","tractor_model","description")

Здесь я также хочу использовать модель Farmer, чтобы я мог принимать входные данные из нее также с ее полями

forms.py

from .models import Post,Farmer

class PostForm(ModelForm):
    class Meta:
        model = Post
        fields = ["tractor_price","implimentaion","purchase_date","tractor_company","tractor_model","description"]

class FarmerForm(PostForm):
    #declare the field from the Farmer model here.
    first_name = forms.CharField(max_length=100)
    last_name = forms.CharField(max_length=100)
    phone =forms.CharField(max_length=10)
    address = forms.CharField(widget=forms.Textarea)
    email_address = forms.EmailField()
    class Meta(PostForm.Meta):
        fields = ['first_name','last_name','phone','address','email_address'] + PostForm.Meta.fields

теперь внутри вашего views.py вы можете просто вызвать FarmerForm.
. B) Другой вариант
. forms.py

from .models import Post,Farmer

class PostForm(ModelForm):
    class Meta:
        model = Post
        fields = ["tractor_price","implimentaion","purchase_date","tractor_company","tractor_model","description"]

class FarmerForm(ModelForm):
    class Meta:
        model = Farmer
        fields = ['first_name','last_name','phone','address','email_address']

внутри вашего views.py теперь вы должны вызвать эти две формы.

from .forms import FarmerForm,PostForm
def add_post(request):
    submitted = False
    if(request.method == "POST"):
        form1 = FarmerForm(request.POST)
        form2 = PostForm(request.POST)
        
        if form1.is_valid() and form2.is_valid():
            form1.save()
            form2.save()
            return HttpResponseRedirect("/add_post?submitted=True")
    else:
        form1 = FarmerForm()
        form2 = PostForm()
        if("submitted" in request.GET):
            submitted = True
    return render(request,"tractor/form.html",{"form1":form1,"form2":form2, "submitted": submitted})

Теперь внутри вашего шаблона (form.html) вы можете сделать что-то вроде этого.

<form method="POST" action="{% url 'tractor:add_post' %}">
{% csrf_token %}
{{ form1.as_p }}
{{ form2.as_p }}
<button type='submit'> send data </button>
</form>
Вернуться на верх