【问题标题】:Django multiple foreign keys to reference same table multiple times?Django多个外键多次引用同一个表?
【发布时间】:2016-12-23 16:50:22
【问题描述】:

我正在使用 MySQL 构建一个 Django 站点。不幸的是,我不太清楚如何将我的架构放在一起。

我有一个用户表、一个任务表和一个会话表。

每个用户一次可以有 3 个活动任务。每个用户可以在每个工作会话中更新(设置为完成、失败或保持打开状态)这三个任务。如果用户完成任务(即打开的任务少于三个),下次他们创建会话时,他们将有机会创建新任务。最后一部分很容易编码,它是支撑表模式的逻辑给我带来了麻烦。

我的问题是我不知道如何正确建模。起初我想在 Session 表中包含 3 个单独的列,外键指向 Task 表。但是,从我正在阅读的内容来看,我似乎无法添加 3 个外键,它们都引用同一个表的不同实例。或者,我考虑在会话和任务之间创建一个多对多表。但是,我是否必须为每个打开的会话创建三个表条目?这似乎很快就会失控,而且在我看来也很草率。

老实说,我完全不知道如何建模。非常感谢任何帮助或意见。

谢谢

【问题讨论】:

  • 看起来我不能添加 3 个外键都引用同一个表的不同实例”。你当然可以。你试过什么?
  • 老实说:我没有。我让自己迷失在文档的海洋中,但我确信这个解决方案是行不通的。我太傻了……谢谢你的现实检查!

标签: mysql django database database-design database-schema


【解决方案1】:

更新:当在 Django 中从另一个模型(表)多次引用同一个模型(表)时,您必须添加 related_name 参数。

class Task(models.Model):
    name = models.CharField(max_length=50)

class MyUser(models.Model):
    user = models.OneToOneField(User)
    task_1 = models.ForeignKey(Task, related_name='task_one')
    task_2 = models.ForeignKey(Task related_name='task_two')
    task_3 = models.ForeignKey(Task related_name='task_three')

【讨论】:

    【解决方案2】:

    类似的东西

    class Task(models.Model):
        name = models.CharField(max_length=50)
    
    class MyUser(models.Model):
        user = models.OneToOneField(User)
        task_1 = models.ForeignKey(Task)
        task_2 = models.ForeignKey(Task)
        task_3 = models.ForeignKey(Task)
    

    【讨论】:

    • 快速更新。我尝试了这种方法,但是在我为每个任务外键设置一个“related_name”字段之前它不会起作用,就像这样。 "task_1 = models.ForeignKey(Task, related_name="task_one")"
    猜你喜欢
    • 2012-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-07
    • 2018-03-25
    • 1970-01-01
    • 2015-05-10
    相关资源
    最近更新 更多