Python 如何创建Django多模型表单
我想从多个模型创建一个表单,我想在一个页面上呈现表单。 我尝试使用主模型CompanyRegistration创建一个简单的表单,但它只提供4个字段 我希望能够创建一个表单,使所有的模型都是相关的,因为所有的模型都应该服务于一个目的 下面是我的models.py文件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
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
。看到这个帖子了吗