solución a corto
qs = Model.objects.filter(...) # qs with objects to exclude
result = Model.objects.exclude(pk__in=qs.values_list('pk', flat=True))
Más solución SECO
Sin embargo, si desea utilizar la lógica muchas veces, sugeriría a encapsular en un método. Aquí está un ejemplo que personnaly utilizado en un conjunto de consultas personalizado:
class QuerysetUtils:
def get_queryset_complement(self, method):
return self.exclude(pk__in=method().values_list('pk', flat=True))
class ExpirableQueryset(QuerysetUtils, models.query.QuerySet):
def expired(self):
return self.filter(expiration__lte=timezone.now())
def unexpired(self):
return self.get_queryset_complement(self.expired)
Sería de gran ayuda para que el Django queryset encadena desea que el complemento de, con el fin de darle la forma más precisa para conseguir ese complemento. –
Quiero algo que funcione para cualquier conjunto de consulta. –