我正在使用Django构建一个webapp,这将用于跟踪人员和工作/演出空缺。我们尝试提供帮助的人的类型是截然不同的,但人们可能属于多个类别。
举一个更具体的例子,让我有演员,歌手,舞者。我可以设置三个表:
class Actor(models.Model):
name = models.TextField(max_length=100)
dob = models.DateField()
email = models.EmailField()
number = models.TextField(max_length=15)
sex = models.TextField(max_length=1)
dramatic = models.BooleanField()
comedic = models.BooleanField()
height = models.DecimalField(max_digits=3, decimal_places=2)
weight = models.DecimalField(max_digits=5, decimals_places=2)
class Singer(models.Model):
name = models.TextField(max_length=100)
dob = models.DateField()
email = models.EmailField()
number = models.TextField(max_length=15)
sex = models.TextField(max_length=1)
style = models.TextField(max_length=20)
range = models.TextField(max_length=50)
class Dancer(models.Model):
name = models.TextField(max_length=100)
dob = models.DateField()
email = models.EmailField()
number = models.TextField(max_length=15)
sex = models.TextField(max_length=1)
style = models.TextField(max_length=20)
由于一系列原因,能够识别出独特的人,这将是非常好的。如果我在sql中执行此操作,我会有一个People
表,其中我存储了诸如name,dob等信息。然后将Actors
表包含PersonId
作为外语key,以及所有actor特定属性。然后,我创建了一个允许我查看已连接数据的视图。
但是,我也希望用户能够以单一形式输入歌手的信息。即不必创建一个人,然后一旦他们填写person
表格,填写另一个表格,将该人添加为歌手。
所以,毕竟,我的问题是:有没有办法设置Django,以便我可以有一个表单写入多个表,并从多个表返回信息,如视图?如果我不能,那么构建这样的东西的最佳方法是什么?
即使是正确方向的指针也会受到赞赏。我甚至不确定谷歌的正确用语是什么。
答案 0 :(得分:1)
Django模型支持三种inheritance模型。这听起来像是你multi-table inheritance之后:
Django支持的第二种模型继承是当层次结构中的每个模型都是模型本身时。每个模型对应于自己的数据库表,可以单独查询和创建。继承关系引入子模型与其每个父模型之间的链接(通过自动创建的
OneToOneField
)。例如:template<class T> struct IntegerType { T value; //Next line causes errors constexpr IntegerType(IntegerType& value) : value(value.value) { } constexpr IntegerType(T value) : value(value) { } }; template<class int_t> class FullMult{ int_t value; int_t carry; public: constexpr FullMult() : value(0), carry(0) { } constexpr FullMult(const int_t& value, const int_t& carry) : value(value), carry(carry) { } }; int main() { FullMult<IntegerType<unsigned int> > thing = FullMult<IntegerType<unsigned int> >( IntegerType<unsigned int>(12),IntegerType<unsigned int>(12)); }
from django.db import models class Place(models.Model): name = models.CharField(max_length=50) address = models.CharField(max_length=80) class Restaurant(Place): serves_hot_dogs = models.BooleanField(default=False) serves_pizza = models.BooleanField(default=False)
中的所有字段也将在Place
中可用,但数据将驻留在不同的数据库表中。所以这些都是可能的:Restaurant