django - 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 来做到这一点,如果学生和老师有相同的班级,他们就会被联系起来。有什么办法吗?
解决方案
您可以Schüler
使用以下名称获得所有Klasse
内容:Lehrer
mylehrer
Schüler.objects.filter(Klasse__lehrer=mylehrer)
反之亦然,您可以检索一个命名的所有Lehrer
s :Schüler
myschüler
Lehrer.objects.filter(Klassenlehrer_von__Schüler=myschüler)
Lehrer
因此没有必要在/模型中存储这些带有额外字段的项目Schüler
,因为Klasse
模型充当了模型和模型之间的连接表[wiki]。Lehrer
Schüler