내 모델 디바이스 용 맞춤 관리자가 있습니다. 반환 된 쿼리 집합이 비어 있으면 다른 개체를 반환하고 싶습니다. 문제는 빈 쿼리 세트가 비어있는 것으로 평가되지 않는다는 것입니다.django에서 빈 쿼리 세트를 확인하십시오.
queryset이 비어 있는지 확인하는 방법을 찾기 위해이 스레드를 조사했습니다. In Django, what is the most efficient way to check for an empty query set? Checking for empty queryset in Django
이 내 모델 :
class DeviceField(models.Model):
"""
Can be connected to any class and any field in that class. Specifies how the values and field names are returned for the field.
"""
device = models.ForeignKey(Device, verbose_name=_("Device"))
content_type = models.ForeignKey(ContentType, verbose_name=_("Class"))
field_name = models.CharField(max_length=150, verbose_name=_("field name"))
display_field = models.CharField(max_length=255, verbose_name=_("How to display the field name?"))
display_value = models.CharField(max_length=255, verbose_name=_("How to display the value?"))
objects = DeviceFieldManager()
그리고 이것은 내 관리자입니다. 이 if 문을 모두 사용하여 비어 있는지 확인하십시오.
class DeviceFieldManager(models.Manager):
"""
Behaves like a normal manager. Except in the case that no such device field exists. Then it will return the standard value of the field.
"""
def get_query_set(self):
"""
Does the queryset overriding :). If empty, get the original values
"""
queryset = super(DeviceFieldManager,self).get_query_set()
try:
a = queryset[0]
print "we have something here"
except IndexError:
print "It is frigging empty"
if queryset == super(DeviceFieldManager, self).none():
print "this queryset is just like an empty one"
if not queryset:
print "not queryset"
if not queryset.count():
print "not queryset count"
if queryset:
print "if queryset"
if queryset.exists():
print "queryset exists"
else:
print "A value is return, we don't need to do anything!"
print queryset.count()
print super(DeviceFieldManager, self).none()
print queryset == super(DeviceFieldManager, self).none()
return queryset
그리고 이것은 쉘에서 온 것입니다. "mobile"(존재하는) 및 "cow"(존재하지 않음) 장치의 경우 Manager는 동일한 동작을 표시합니다. 쿼리 세트의 첫 번째 값을 인쇄하려고하면 "암소"에 대해 예상되는 IndexError를 얻습니다.
In [8]: a= DeviceField.objects.filter(device__name="mobile")
we have something here
if queryset
queryset exists
1
[]
False
In [9]: a[0]
Out[9]: <DeviceField: DeviceField object>
In [10]: a= DeviceField.objects.filter(device__name="cow")
we have something here
if queryset
queryset exists
1
[]
False
In [11]: a[0]
---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
/<ipython-input-11-5ccf417d7af1> in <module>()
----> 1 a[0]
/local/lib/python2.7/site-packages/django/db/models/query.pyc in __getitem__(self, k)
188 qs = self._clone()
189 qs.query.set_limits(k, k + 1)
--> 190 return list(qs)[0]
191 except self.model.DoesNotExist, e:
192 raise IndexError(e.args)
IndexError: list index out of range
여기서 내가 뭘 잘못하고 있니? 쿼리 세트가 비어 있거나 없으면 어떻게 매니저에서 체크 할 수 있습니까?
고마워요 :)