AttributeError:“ NoneType”对象没有属性“ ESC”

时间:2020-05-21 07:45:35

标签: django django-models django-views

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)

1 个答案:

答案 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