Jgl*_*art 6 django-models database-schema
对于具有特定关系的Django应用程序,我感到困惑.我一直在查看以下数据库模式:http://www.databaseanswers.org/data%5Fmodels/customers_and_orders/index.htm
我对Customer_addresses与Customers和Addresses之间的关系感到困惑.
我知道:
这是否等同于多对多的关系?
当我在django中构建模型时,我有(简化):
class Customer_Address(models.Model):
customer = models.ManyToManyField('inventory.Customer')
address = models.ManyToManyField('inventory.Address')
Run Code Online (Sandbox Code Playgroud)
这是正确的吗?或者这更有意义:
class Customer_Address(models.Model):
customer = models.ForeignKeyField('inventory.Customer')
address = models.ManyToManyField('inventory.Address')
Run Code Online (Sandbox Code Playgroud)
更新的问题:
基于这种想法,它是一个多对多的关系.有一个ManyToMany关系,需要两个ManyToManyFields吗?
基于以下内容:http: //en.wikipedia.org/wiki/Many-to-many_%28data_model%29
由于Django支持ManyToManyFields,我甚至不需要联结表吗?如果我使用联结表(Customer_addresses),文章似乎暗示使用两个OneToMany关系,这不仅仅是这样的两个外键?
class Customer_Address(models.Model):
customer = models.ForeignKeyField('inventory.Customer')
address = models.ForgeinKeyField('inventory.Address')
Run Code Online (Sandbox Code Playgroud)
更新的问题:
现在我们知道Django构建了中间表,并且不需要表Customer_Addresses.哪个表应该有ManyToManyfield?客户表?还是地址表?
示例:https://docs.djangoproject.com/en/dev/topics/db/models/#intermediary-manytomany
在Person/Groups示例中.. Groups具有ManyToManyField.是否有任何原因无法在Person表中定义ManyToManyfield?
对于第一个问题.
当一段关系表明这一点
一个客户可以拥有多个地址.
许多客户可以拥有相同的(一个)地址
比它显然是一个多对多的关系,并始终使用ManyToManyField
现在是第二个问题.
如果您想要一个在两个多对多实体之间有额外字段的中间表(表/模型),该怎么办?
比从另外两个模型创建一个具有ForiegnKey的新模型.如在
class Person(models.Model):
name = models.CharField(max_length=128)
def __unicode__(self):
return self.name
class Group(models.Model):
name = models.CharField(max_length=128)
members = models.ManyToManyField(Person, through='Membership')
def __unicode__(self):
return self.name
class Membership(models.Model):
person = models.ForeignKey(Person)
group = models.ForeignKey(Group)
date_joined = models.DateField()
invite_reason = models.CharField(max_length=64)
Run Code Online (Sandbox Code Playgroud)
更多阅读
| 归档时间: |
|
| 查看次数: |
4078 次 |
| 最近记录: |