首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用“槽”使用ManyToManyRelationship

使用“槽”使用ManyToManyRelationship
EN

Stack Overflow用户
提问于 2018-07-11 15:13:28
回答 1查看 24关注 0票数 0

我有两个实体/模型,个人和事件。

人与事件之间有多到多的联系,一个人可以参与多个事件,在一个事件上多人要去。

一个人不一定要参加一个事件,一个事件可以是空的。

我可以在Django上做这个

代码语言:javascript
复制
class Person(models.Model):

name = models.CharField(max_length=100)
event = models.ManyToManyField(Publication)  

这将创建一个具有以下内容的相关表:

代码语言:javascript
复制
id | person_id | event_id

但我需要一个人有更多的属性与事件,除了键,如Person's event number, Person's booth等。

在Django文档中,我发现了“低谷”模型。

不清楚(没有找到)的是使用表单创建/更新/删除,所以我需要一些示例和查询集的工作方式;

示例:

  1. 在表单中,我希望从列表中选择和事件,并与该人相关联,并在表单中填写人的事件编号、人的展位等。
  2. 如何使用1)作为表单集,让同一表单/页面上的用户将多个事件链接到某个人。
  3. 如果一个事件或一个人被删除,“槽”模型记录是自动删除还是需要手工操作?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-11 15:19:31

像这样的东西应该管用。

代码语言:javascript
复制
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,当事件或个人被删除时,出席人数将消失。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51288980

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档