Python 如何创建Django多模型表单

Python 如何创建Django多模型表单,python,django,django-models,django-forms,Python,Django,Django Models,Django Forms,我想从多个模型创建一个表单,我想在一个页面上呈现表单。 我尝试使用主模型CompanyRegistration创建一个简单的表单,但它只提供4个字段 我希望能够创建一个表单,使所有的模型都是相关的,因为所有的模型都应该服务于一个目的 下面是我的models.py文件 from django.conf import settings from django.db import models class CompanyRegistration(models.Model): user = m

我想从多个模型创建一个表单,我想在一个页面上呈现表单。 我尝试使用主模型CompanyRegistration创建一个简单的表单,但它只提供4个字段

我希望能够创建一个表单,使所有的模型都是相关的,因为所有的模型都应该服务于一个目的

下面是我的models.py文件

from django.conf import settings
from django.db import models

class CompanyRegistration(models.Model):
    user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
    name = models.ForeignKey("CompanyName", on_delete=models.CASCADE)
    company_details = models.ForeignKey("CompanyDetail", on_delete=models.CASCADE)
    company_directors = models.ForeignKey("CompanyDirector", on_delete=models.CASCADE)

    class Meta:
        verbose_name = "Company Registration"

    def __str__(self):
        return f"New Company registration : {self.name.name1}"
    

class CompanyName(models.Model):
    name1 = models.CharField(max_length=150, verbose_name="Company Name")
    name2 = models.CharField(max_length=150, verbose_name="2nd Choice")
    name3 = models.CharField(max_length=150, null=True, blank=True, verbose_name="3rd Choice")
    name4 = models.CharField(max_length=150, null=True, blank=True, verbose_name="4th Choice")

    def __str__(self):
        return self.name1

    
class CompanyDetail(models.Model):
    description = models.TextField(max_length=200)
    address = models.ForeignKey("CompanyAddress", on_delete=models.CASCADE, verbose_name="Company Address")

    class Meta:
        verbose_name = "Company Details"


class CompanyAddress(models.Model):

    PROVINCE = (
        ("Eastern Cape", "Eastern Cape"),
        ("Free State", "Free State"),
        ("Gauteng", "Gauteng"),
        ("KwaZulu-Natal", "KwaZulu-Natal"),
        ("Limpopo", "Limpopo"),
        ("Mpumalanga", "Mpumalanga"),
        ("North West", "North West"),
        ("Northern Cape", "Northern Cape")
    )

    street_address = models.CharField(max_length=150)
    building = models.CharField(max_length=150, verbose_name="Building/Flat Number")
    city = models.CharField(max_length=150)
    province = models.CharField(max_length=150, choices=PROVINCE)
    postal_code = models.IntegerField()
    international_address = models.CharField(max_length=200, null=True, blank=True)
    advanced_options = models.ForeignKey("AdvancedOption", on_delete=models.CASCADE)

class AdvancedOption(models.Model):
    MONTH = (
        ("January", "January"),
        ("February", "February"),
        ("March", "March"),
        ("April", "April"),
        ("May", "May"),
        ("June", "June"),
        ("July", "July"),
        ("August", "August"),
        ("September", "September"),
        ("October", "October"),
        ("November", "November"),
        ("December", "December"),
    )

    authorized_shares = models.IntegerField(default=1000)   
    financial_year_end = models.CharField(max_length=150, choices=MONTH, default="February")

    class Meta:
        verbose_name = "Advanced Options"


class CompanyDirector(models.Model):
    director = models.ManyToManyField("Director")

    


class Director(models.Model):
    first_name = models.CharField(max_length=150)
    last_name = models.CharField(max_length=150)
    email = models.EmailField(max_length=50)
    phone = models.CharField(max_length=150)


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

您可以根据自己的需要创建多个表单,只需对表单使用
commit=False
。看到这个帖子了吗