Дополнительное обходное решение для подзапросов в Django, отличное от mysql

Я пытаюсь подготовить subnet=adress/netmask для представления, а start_ip и end_ip для фильтрации в lifs qs. Затем я хочу использовать подзапрос для отсечения одного интерфейса, так как у vserver их может быть несколько. Проблема в том, что я не могу передать дополнительное поле, созданное в lifs queryset.

lifs = (NetworkLif.objects.filter(vserverid=OuterRef('pk'))
        .annotate(network=Concat('address', Value('/'), 'netmasklength', output_field=CharField()))
        .extra(select={'start_ip': "INET_NTOA(INET_ATON(address) & 0xffffffff ^ ((0x1 << ( 32 - netmasklength)  ) -1 ))"})
        .extra(select={'end_ip': "INET_NTOA(INET_ATON(address) | ((0x100000000 >> netmasklength ) -1 ))"})
        .order_by('network')
        )


queryset = (Vserver.objects.filter(type='DATA')
                            .exclude(name__endswith='-mc')
                            .annotate(subnet=Subquery(lifs.values('network' )[:1]),
                            #.annotate(start_ip_address=Subquery(lifs.values('start_ip')[:1]))
                            #.annotate(end_ip_address=Subquery(lifs.values('end_ip')[:1]))
                            .values('id', 'clusterid__name', 'name', 'state', 'nfsenabled', 'cifsenabled',  'ldapclientenabled', 'dnsenabled', 'subnet', )#'start_ip_address')#, 'end_ip_address' )
                            .order_by('id')
            )

получаю эту ошибку, я предполагаю, что это из-за логики вычисления

   raise FieldError("Cannot resolve expression type, unknown output_field")
django.core.exceptions.FieldError: Cannot resolve expression type, unknown output_field

есть ли какой-нибудь обходной путь? Я знаю, что в postgresql distinct('name') решит мою проблему. К сожалению, ActiveIQ работает на mysql.

Вернуться на верх