这是我第一次使用Django,在工作中我遇到了一个困惑,那就是如何在视图中创建一个特定的语句来得到我想要的输出。我创建了一个模型'Parents',它包含了一个特定学生的数据(外键),并且我不知道如何访问该学生ID以进行进一步的处理(如使用Attendance),或结果,该特定的学生。下面是必要的代码和我的试验,以获取数据。
Models.py
class Students(models.Model):
id = models.AutoField(primary_key=True)
admin = models.OneToOneField(CustomUser, on_delete=models.CASCADE)
gender = models.CharField(max_length=50)
address = models.TextField()
course_id = models.ForeignKey(Courses, on_delete=models.DO_NOTHING, default=1)
session_year_id = models.ForeignKey(SessionYearModel, on_delete=models.CASCADE)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
objects = models.Manager()
def __str__(self):
return self.admin.first_name + " " + self.admin.last_name
class Parents(models.Model):
id = models.AutoField(primary_key=True)
admin = models.OneToOneField(CustomUser, on_delete=models.CASCADE)
gender = models.CharField(max_length=50)
**student = models.ForeignKey(Students, on_delete=models.CASCADE)**
relation = models.CharField(max_length=255)
address = models.TextField()
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
objects = models.Manager()
def __str__(self):
return self.admin.first_name + " " + self.admin.last_name
这里我有两个模型,Students模型包含有关学生的所有信息,另一个模型是Parent模型,它包含带有特定学生ID的家长信息。
下面是视图文件代码,我试图获取当前登录家长的学生ID,
def HOME(request):
stud_data = Parents.objects.filter(student__id = request.user.id)
print(stud_data)
return None
在页面重新加载时,我能够得到一个空的QuerySet[],因为它无法找到ID。
请帮助我找到这个问题的解决方案,这样我就可以继续思考发展。
谢谢:)
2条答案
按热度按时间z31licg01#
正如您在这里提到的,您正在查找当前登录的Parent的学生数据。因此,您可以直接从Parent对象查找学生数据。如下所示:
这个关系起作用是因为Parent与CustomUser有一个OneToOne关系(我假设Authentication的自定义User模型),因此您应该从
request.user.parent
获取Parent对象(OneToOne的反向关系)。此外,我认为父母和学生之间的关系应该是ManyToMany,因为一个学生可以有多个父母,一个父母可以有多个学生(或孩子)。
erhoui1w2#
有两种可能性:
1.您附加的View代码应该返回
stud_data
而不是None,但我假设您知道这一点,并且代码的当前状态只是用于调试目的。request.user.id
包含了一个不属于数据库中任何学生ID的值。因为你使用的是filter
,它不会对此进行抱怨,只会返回一个空的QuerySet
。我建议在这里使用get()
过滤器,它会引发DoesNotExist
异常,也会有助于调试。希望能有所帮助!
祝你在新的旅程中好运!