escs = esc.objects.filter(Education_Levels__in=studentenroll.values_list('Education_Levels')).order_by(
'id')
edulevel = StudentsEnrollmentRecord.objects.filter(ESC__in=escs.values_list('id')).order_by(
'pk').first()
当我尝试print("ESC", edulevel)
时,我收到了此消息。
ESC None
如何获取esc的ID?
这是我的模特
class StudentsEnrollmentRecord(models.Model):
Student_Users = models.ForeignKey(StudentProfile, on_delete=models.CASCADE,null=True)
Education_Levels = models.ForeignKey(EducationLevel, related_name='+', on_delete=models.CASCADE,blank=True,null=True)
ESC = models.ForeignKey(esc, on_delete=models.CASCADE,null=True,blank=True)
答案 0 :(得分:-1)
两种可能性:
1:您在外键中设置了null=True
,这意味着查询集返回的对象在 ecs 外键中具有空值,因此您可以删除该空值约束或检查是否为空值在对query_set的结果进行任何操作之前
2nd:这是因为您的查询集未返回任何对象(数据库中没有满足过滤条件的模型对象)
您可以通过以下方式确认这一点:
try:
edulevel = StudentsEnrollmentRecord.objects.filter(ESC__in=escs.values_list('id')).order_by(
'pk').first()
except StudentsEnrollmentRecord.DoesNotExist:
print("I Did not find anything. Try adding objects first")
您可以看到ecs模型的所有对象
#This is only for debugging process to see what objects do you actually have to opt for suitable filters
query_set = esc.objects.all()
print("ecs")
print(query_set)
query_set = StudentsEnrollmentRecord.objects.all()
print("SER")
print(query_set)
更新:
如果这样的情况,您也可以使用
edulevel = StudentsEnrollmentRecord.objects.filter(ESC__in=escs.values_list('id')).order_by(
'pk').first()
if(edulevel)
print(edulevel)
您也可以像这样使用计数
edulevel = StudentsEnrollmentRecord.objects.filter(ESC__in=escs.values_list('id')).order_by(
'pk').first()
if(edulevel.count()>0)
print(edulevel)
最后但并非最不重要的一点是,您还可以按照此处的说明使用exist() https://stackoverflow.com/a/9089028/11979793