我有2个实体/模型的人物和事件。
Person与事件之间存在多对多的联系,一个Person可以参加多个事件,一个Event上有多个Persons正在参加。
一个人不一定要参加活动,活动可以是空的。
我可以在Django
中做到这一点:
class Person(models.Model):
name = models.CharField(max_length=100)
event = models.ManyToManyField(Publication)
这将创建一个与以下内容相关的表:
id | person_id | event_id
但是我需要一个人拥有与事件相关的更多属性,除了诸如Person's event number, Person's booth
等键之外。
在Django文档中,我找到了“槽”模型。
尚不清楚(找不到)与使用表单创建/更新/删除有关,因此我需要一些示例以及查询集的工作方式;
示例:
在一个我要从列表中选择并与该人员相关联的事件的表单中,并以该人员的事件编号,人员的展位等形式填写。
我如何使用1)作为表单集,以便同一表单/页面上的用户将多个事件链接到一个人。
如果事件或人物被删除,“槽”模型记录是自动删除还是需要手动执行操作?
答案 0 :(得分:1)
应该这样的事情。
class Person(models.Model):
name = models.CharField(max_length=100)
events = models.ManyToManyField('Event', through='Attendance')
class Event(models.Model):
attendees = models.ManyToManyField('Person', through='Attendance')
class Attendance(models.Model):
person = models.ForeignKey(Person, related_name='attendances', on_delete=models.CASCADE)
event = models.ForeignKey(Event, related_name='attendances', on_delete=models.CASCADE)
booth = models.CharField(max_length=10)
然后,您可以简单地为Attendance
对象创建表单/表单集。
您可以通过p.events.all()
访问用户的活动,也可以通过p.attendances.all()
访问用户的出席情况(带有这些额外的信息)。
同样,您可以通过e.attendees.all()
等查看参加活动的所有人员。
由于设置了on_delete=models.CASCADE
,因此删除事件或人员后,出席者将消失。