django模型中first()和filter()之间的差异

时间:2017-06-11 05:24:17

标签: django django-models django-forms

我有一个只有一个条目的InstituteDetailsModel。我有另一个表StudentDetails,它在下面的一个列中使用InstituteDetailsModel作为FK:

institute = models.ForeignKey('institute.InstituteDetailsModel', to_field="sys_id", on_delete = models.PROTECT, null=False, blank=True)

现在,在存储学生详细信息时,我尝试使用以下两种方法从Institute表中获取唯一的条目。第二种方法抛出错误Select a valid choice. That choice is not one of the available choices.,而第一种方法工作正常。

我想知道

之间有什么区别
InstituteDetailsModel.objects.filter(sys_id=1)

&安培;

InstituteDetailsModel.objects.first()

为什么其中一个人工作而另一个人没有工作。

1 个答案:

答案 0 :(得分:1)

InstituteDetailsModel.objects.filter(sys_id=1)

当您执行上述操作时,将返回InstituteDetailsModel的Queryset

 InstituteDetailsModel.objects.first()

这将返回InstituteDetailsModel的实例

所以你必须从Queryset中的索引中获取数据,如

 ins = InstituteDetailsModel.objects.filter(sys_id=1)
 ins = ins[0]

现在insInstituteDetailsModel.objects.first()的类型相同

如果InstituteDetailsModel模型没有任何条目,则代码下方将返回None

InstituteDetailsModel.objects.first()

但是下面将返回Blank Queryset

InstituteDetailsModel.objects.filter(sys_id=1)