Почему этот аннотированный django queryset со значениями rawSQL не устанавливается, а необработанный запрос возвращает результаты?
Проблема в том, что кверисет django не содержит данных из необработанного sql запроса
interfaces = Interface.objects.filter(
membership__in=membership_set
).annotate(
utilisation=RawSQL(
'SELECT utilisation FROM interfacestat WHERE interface.name = interfacestat.ifl AND interfacestat.date = "%s"'
,(recent_date,)
),
).order_by('name')
Итак, я использую выражение RawSQL
для заполнения поля utilisation
.
Я проверяю необработанный sql с помощью print(interfaces.query)
и запускаю его непосредственно в MySQL.
Он возвращает результаты для поля utilisation
на нескольких записях - однако, когда я прохожусь циклом по набору запросов, поле utilisation
всегда остается неустановленным (None).
eg.
interfaces[0].__dict__
{'_state': <django.db.models.base.ModelState object at 0x109b1fdf0>, 'id': 230083, 'name': 'ae1.3216', ...'utilisation': None}
Просмотр:
ipdb> all = interfaces.values()
ipdb> for item in all:
print(item.get('utilisation'))
None
None
None
None
None
None
None
None
None
None
None
None
None