【问题标题】:How to ensure that two foreign keys both belong to the same user如何保证两个外键都属于同一个用户
【发布时间】:2016-03-08 09:27:22
【问题描述】:

我有以下(简化的)数据库模型,我将应用程序的用户称为“老师”:

class Student(models.Model):
    teacher = models.ForeignKey('auth.User', related_name="students")
    name = models.TextField()

class Task(models.Model):
    teacher = models.ForeignKey('auth.User', related_name="tasks")
    description = models.TextField()

class Grade(models.Model):
    student = models.ForeignKey(Student, on_delete=models.CASCADE)
    task = models.ForeignKey(Task, on_delete=models.CASCADE)
    grade =  models.FloatField()

如何确保成绩只属于一个teacher?还是有其他方法可以改进我的模型?

谢谢

编辑: 我刚刚发现了另一个回答类似问题的 SO question: In django, how to limit choices of a foreignfield based on another field in the same model?

我说得对吗,我“必须在输入时确保它”?

【问题讨论】:

    标签: python django django-models


    【解决方案1】:

    试试Django Smart Selects,我们在项目中使用它们来解决这个确切的问题

    【讨论】:

      【解决方案2】:

      您可以尝试通过覆盖 unique_together (https://docs.djangoproject.com/en/dev/ref/models/options/#unique-together) 来满足您的特殊需求。

      但这可能并不容易:Django Unique Together (with foreign keys)

      但是在插入之前检查值永远不会出错;-)

      【讨论】:

        【解决方案3】:

        也许老师应该是一个单独的班级,任务班的老师应该与学生班的老师有关系。也许使用through argument 是它的选项。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-07-02
          • 2012-02-28
          • 2017-06-07
          • 1970-01-01
          • 2019-12-23
          • 1970-01-01
          • 1970-01-01
          • 2015-12-21
          相关资源
          最近更新 更多