Convert SQL query into one for Django ORM

0

My question is this: I want to convert this query sql :

   SELECT
  "misuper_calendareventsretailerdelivery"."id",
  "misuper_calendareventsretailerdelivery"."normal_retailer_delivery_id",
  "misuper_calendareventsretailerdelivery"."delivery_parameter_id",
  "misuper_calendareventsretailerdelivery"."event_start_date",
  "misuper_calendareventsretailerdelivery"."event_end_date",
  "misuper_calendareventsretailerdelivery"."enabled",
  "misuper_calendareventsretailerdelivery"."updated"
FROM "misuper_calendareventsretailerdelivery"
WHERE ('2018-04-25' >= "misuper_calendareventsretailerdelivery"."event_start_date" AND
       '2018-04-25' <= "misuper_calendareventsretailerdelivery"."event_end_date" AND
       "misuper_calendareventsretailerdelivery"."enabled" = TRUE AND
       "misuper_calendareventsretailerdelivery"."normal_retailer_delivery_id" = 5)

In one of Django ORM discarding the possibility of using raw I have tried it in the following way:

CalendarEventsRetailerDelivery.objects.filter(
enabled=True, normal_retailer_delivery=
normal_delivery_parameters, 
**{str(day_date) + '__gte': 'event_start_date',
str(day_date) + '__lte': 'event_end_date'})

Another way as I have tried is as follows:

CalendarEventsRetailerDelivery.objects.extra(
                    where=[day_date.strftime("%Y-%m-%d") + " >= event_start_date AND " + day_date.strftime("%Y-%m-%d") + " <= event_end_date"]).get(
                    normal_retailer_delivery=normal_delivery_parameters, enabled=True)

Using a .extra gives me the following error:

LINE 1: ...alendareventsretailerdelivery" WHERE ((2018-04-18 >= event_s...
                                                             ^
HINT:  Ningún operador coincide con el nombre y el tipo de los argumentos. Puede ser necesario agregar conversiones explícitas de tipos.

And successful, I would appreciate your help or guidelines to be able to request this.

    
asked by Efren Narvaez 18.04.2018 в 19:08
source

2 answers

0

I was able to solve my question in the following way:

CalendarEventsRetailerDelivery.objects.extra(
                    where=[" %s >= event_start_date AND %s <= event_end_date"],
                    params=[day_date, day_date]).get(
                    normal_retailer_delivery=normal_delivery_parameters, enabled=True)

If someone has a better way to do it or a suggestion, I am happy to receive your guidelines.

    
answered by 18.04.2018 в 19:57
0

An idea idea how you could do it is with filter

__ level__lte less than or equal to

__ level__gte greater than or equal to I hope it will be useful to you

CalendarEventsRetailerDelivery.objects.values().all().filter(event_start_date__level__gte='2018-04-25', event_end_date__level__lte='2018-04-25', etc..)
    
answered by 18.04.2018 в 20:04