【发布时间】:2016-10-16 18:35:21
【问题描述】:
我正在尝试创建适合以下要求的正确 Django 模型:
Person Class 与 Address Class 有一对多的关系
Person 类与 Group 类有多对多的关系
Book 类包含 Person 和 Groups 的集合
这是我的代码:
class Person(models.Model):
first_name = models.CharField(max_length=15)
last_name = models.CharField(max_length=20)
def __str__(self):
return self.first_name+ ' - ' + self.last_name
class Address(models.Model):
person = models.ForeignKey(Person)
address_line = models.CharField(max_length=200)
def __str__(self):
return self.address_line
class Group(models.Model):
group_name = models.CharField(max_length=12)
persons = models.ManyToManyField(Person)
def __str__(self):
return self.group_name
class Book(models.Model):
record_name = models.CharField(max_length=12)
person = models.ForeignKey(Person )
group = models.ForeignKey(Group )
def __str__(self):
return self.record_name
但它不正确: 1) 一个组现在可以包含多个人,但这些人不包含任何组。 我不确定是否应该在 Person 类中添加以下代码:
groups = models.ManyToManyField(Group)
2) Book 类现在每个 Book 记录只包含 1 条 Person & Group 记录。
3) 当我将外键添加到模型时,我删除了 on_delete 标签:
person = models.ForeignKey(Person, on_delete=models.CASCADE())
因为它没有编译它,所以要求一些参数。
我知道如何为 C# 制作所有这些,但我对 Python/Django 中的这个简单任务有点坚持。
【问题讨论】:
-
“一个组现在可以包含多个人,但这些人不包含任何组。”。这是错误的。外键在实体之间建立双向关系,因此
person.group_set.all()将为您提供该人所属的组。此外,您的设计容易受到一致性问题的影响。我不确定您的设计是否应该允许这样做,但是一本书可以归属于与该书所属不同组的人所有。
标签: python django django-models