0
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)
4

1 回答 1

0

两种可能:

1:您已设置null=True外键,这意味着查询集返回在ecs外键中具有 null 的对象,因此您可以删除该 null 约束或在对 query_set 的结果进行任何操作之前检查是否为 null

第二:这是因为您的查询集没有返回任何对象(您的数据库中没有满足过滤条件的模型对象)

您可以通过以下方式确认:

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)

更新:

你也可以像这样使用 if 条件

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)

最后但并非最不重要的一点是,您也可以使用这里解释的 exists() https://stackoverflow.com/a/9089028/11979793

于 2020-05-21T08:48:41.843 回答