如何确保两个外键都属于同一个用户

时间:2016-03-08 09:27:22

标签: python django django-models

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

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问题: In django, how to limit choices of a foreignfield based on another field in the same model?

我是对的,我“必须在输入处确保它吗?”

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

您可以尝试使用unique_together(Here)找到解决方法,并根据您的特殊需要覆盖它。

但这可能并不容易:https://docs.djangoproject.com/en/dev/ref/models/options/#unique-together

但是在插入之前检查值是绝对错误的; - )

答案 2 :(得分:0)

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

相关问题