python - 如何创建 Django Multi ModelForm
问题描述
我想从多个模型创建一个表单,我想在一页上呈现表单。我尝试使用主要模型 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}"
解决方案
推荐阅读
- xslt - Report_Entry(worker) 的第一行需要默认为“YES”。工人返回“NO”的所有其他行
- c - 我怎样才能继续为某个点添加某个值?
- javascript - Javascript 在比较整数或布尔数组时更快吗?
- javascript - 如何使用字符串变量作为名称提取数组的数据?
- angular - Angular 没有显示带有延迟加载的组件
- xslt - XPATH 从前一个元素复制节点值
- asp.net - 在 ASP.NET MVC 的单个请求生命周期中处理基于路由的 cookie?
- selenium - 无法访问框架中的元素
- symfony - 插入数据一对多关系symfony4的正确方法是什么?
- xpath - XQuery:如何知道是否有双峰?