J'ai un problème avec la méthode extra() de queryset.Modèles django filter() et extra()
, je récupérer mes objets avec:
invoices = Invoice.objects.select_related().filter(quantity__gt=0,begin__gte=values['start_day'],end__lte=values['end_day'])
Il fonctionne, j'ai mes factures. Après j'utiliser un autre filtre temporel():
invoices = invoices.filter(max__gte=duration)
Il fonctionne aussi. Mais, après, je dois utiliser() supplémentaire en raison de ma demande, je dois donc que:
cond = 'discount="YES" AND priceeuro*(%d%%fixe)<=%d'
invoices = invoices.extra(where=[cond],params=[duration,price])
Eh bien, cela fonctionne, mais ma variable factures contient plusieurs éléments qui avant. C'est comme si les deux filtres() n'étaient pas utilisés. Si vous savez pourquoi,
merci.
EDIT:
Ceci est le SQL associé à la requête:
WHERE
("invoice"."product_id" IN (
SELECT U0."id"
FROM "product" U0
WHERE U0."accommodation_id" IN (
SELECT U0."id"
FROM "accommodation" U0
WHERE U0."resort_id" IN (
SELECT U0."id"
FROM "resort" U0
WHERE U0."area_id" IN (
SELECT U0."id"
FROM "area" U0
WHERE U0."country_id" = 9
))))
AND "invoice"."quantity" > 0
AND "invoice"."end" <= 2010-12-31
AND "invoice"."begin" >= 2010-12-01
AND fixe % 7 = 0
AND (discount="YES" AND pricediscountincludedeuro*(7% fixe)<=250)OR(discount="NO" AND priceeuro*(7% fixe)<=250))