我正在尝试创建适合以下要求的正确Django模型:
Person Class与Address Class具有1对多的关系
Person Class与Group Class有很多关系
Book Class包含人物和群组的集合
这是我的代码:
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类现在只包含1个Person& amp;的记录。每本书记录组。
3)当我将外键添加到模型中时,我删除了 on_delete标签:
person = models.ForeignKey(Person, on_delete=models.CASCADE())
因为它没有编译它,要求一些参数。
我知道如何为C#制作所有这些内容,但我在Python / Django中对这个简单的任务很有帮助。
答案 0 :(得分:1)
1)ManyToMany字段应该只出现在其中一个模型中,并且可以在Person模型中看到你可能想要的东西。 了解有关ManyToMany字段的数据保存在不同的表中非常重要。 Django只允许这个字段通过buth模型可见(所以基本上,选择它移动方便的地方)。
2)通过你的结构看,我建议你使用ManyToMany字段到一个不同的表格。这是一个例子:
class Activity(models.Model):
name = models.CharField(max_length=140)
description = models.TextField(blank=True, null=True)
class Route(models.Model):
title = models.CharField(max_length=140)
description = models.TextField()
activities_meta = models.ManyToManyField(Activity, through = 'RouteOrdering')
class RouteOrdering(models.Model):
route = models.ForeignKey(Route, on_delete=models.CASCADE)
activity = models.ForeignKey(Activity, on_delete=models.CASCADE, related_name='activita')
day = models.IntegerField()
order = models.IntegerField(default=0)
这种方式将数据绑定到ManyToMany字段