首页 > 解决方案 > Foreinkey 的查询

问题描述

我目前正在尝试制作一个 django 项目,但我被卡住了

class Klasse(models.Model):
    klasse = models.CharField(max_length=60, null=True)

    def __str__(self):
        return self.klasse


class Lehrer(models.Model):

    Name_und_Nachname = models.CharField(max_length=200, null=True)
    Klassenlehrer_von = models.ForeignKey(Klasse, max_length=200, null=True, on_delete=models.SET_NULL)
    date_created = models.DateTimeField(auto_now_add=True, null=True)
    def __str__(self):
        return self.Name_und_Nachname



class Schüler(models.Model):

    name_und_Nachname = models.CharField(max_length=200, null=True)

    Klasse = models.ForeignKey(Klasse, max_length=200, null=True, on_delete=models.SET_NULL)
    Klassenlehrer = models.ForeignKey(Lehrer, max_length=200, null=True, on_delete=models.SET_NULL)
    date_created = models.DateTimeField(auto_now_add=True, null=True)

    def __str__(self):
        return self.name_und_Nachname


class Punkte(models.Model):
    punkte_ang = (("0", 0),("1", 1), ("2", 2), ("3", 3), ("4", 4), ("5", 5))
    punkte_norm = (("0", 0),("1", 1))

    Soziales_angagement = models.CharField( max_length=200, null=True, choices=punkte_ang,)
    Lernverhalten = models.CharField(max_length=200, null=True, choices=punkte_norm, )
    Sozialverhalten = models.CharField(max_length=200, null=True, choices=punkte_norm,)
    konfliktlösung = models.CharField(max_length=200, null=True,choices=punkte_norm,  )
    eingentum_anderer = models.CharField( max_length=200, null=True, choices=punkte_norm,)
    date_created = models.DateTimeField(auto_now_add=True, null=True)

所以对于代码我想说我知道它不是最漂亮的,也不是最好的。所以回到我的问题,我需要一种方法来连接学生 = Schüler 和教师 = Lehrer 之间的前键,我认为我可以通过查询 Klasses 来做到这一点,如果学生和老师有相同的班级,他们就会被联系起来。有什么办法吗?

标签: djangodjango-queryset

解决方案


您可以Schüler使用以下名称获得所有Klasse内容:Lehrermylehrer

Schüler.objects.filter(Klasse__lehrer=mylehrer)

反之亦然,您可以检索一个命名的所有Lehrers :Schülermyschüler

Lehrer.objects.filter(Klassenlehrer_von__Schüler=myschüler)

Lehrer因此没有必要在/模型中存储这些带有额外字段的项目Schüler,因为Klasse模型充当了模型和模型之间的连接表[wiki]LehrerSchüler


推荐阅读