Возможно ли преобразовать этот PHP SQL в набор запросов Django?

У меня есть 3 модели :

Это внутри таблицы StatusCollect:

 | id  | code  |     name        |
 | --- | ----- | --------------  |
 |  1  | RTP   | Refused To Pay  |
 |  2  | PTP   | Promosed To Pay |
 |  3  | AP    | Already Paid    |

А это внутри таблицы DataResult:

 | id  |tgl_waktu_assign            |tgl_waktu_update          |tgl_ptp   | total_ptp | phone_number |keterangan|cek|status_penyelesaian|is_active|  create_time             |assign_by_id|master_id |staff_id |upload_master_id|vendor_id |status_id |
 | --- | ---------------------------| -------------------------|----------|-----------|--------------|----------|---|-------------------|---------|--------------------------|------------|----------|---------|----------------|----------|----------|
 |  1  |2021-12-01 13:42:13.000000  |2021-12-01 13:42:13.000000|2021-12-09| 20000000  |99999999999999|          | 0 |     1             | 1       |2021-12-01 13:42:13.000000|   3        |    367   |   2     |       1        |   1      |   1      |
 |  2  |2021-12-01 13:42:13.000000  |2021-12-01 13:42:13.000000|2021-12-09| 50000000  |99999999999999|          | 0 |     1             | 1       |2021-12-01 13:42:13.000000|   3        |    367   |   2     |       1        |   1      |   2      |
 |  3  |2021-12-01 13:42:13.000000  |2021-12-01 13:42:13.000000|2021-12-09| 80000000  |99999999999999|          | 0 |     1             | 1       |2021-12-01 13:42:13.000000|   3        |    367   |   2     |       1        |   1      |   2     |
 |  4  |2021-12-02 13:42:13.000000  |2021-12-01 13:42:13.000000|2021-12-09| 80000000  |99999999999999|          | 0 |     1             | 1       |2021-12-01 13:42:13.000000|   3        |    367   |   2     |       1        |   1      |   3      |

Так что я хочу считать каждый день, сколько каждых данных находится в Collect Status, а также в DataResult вместе с общим Collect Status, содержащимся в DataResult. И результат должен быть таким:

 |   Tanggal   | RTP | PTP | AP | Total |
 | ----------- | ----| ----|----|-------|
 |  2021-12-01 |  1  |  2  |  0 |   3   |
 |  2021-12-02 |  0  |  0  |  1 |   1   |

и из старого проекта, использующего CI, используя SQL-запрос следующего содержания:

 $status_collect = $this->db->from('status_collect')->get()->result();

    $sql="SELECT date_format(tglwaktu_update,'%Y-%m-%d') AS tanggal, ";
    foreach ($status_collect as $data) {
         $sql .= "COUNT( IF( status = '$data->code', no, NULL) ) AS $data->code, ";
    }
    $sql .= "COUNT( IF( status != '', no, NULL) ) AS total ";
    $sql .= "FROM data_assign LEFT JOIN data_master ON data_assign.data_id=data_master.id ";
    $sql .= "WHERE tglwaktu_update != '0000-00-00 00:00:00' AND id_period='$id_period' AND cek='0' ";
    $sql .= "GROUP BY status,tanggal ";
    $sql .= "ORDER BY tanggal";
    $sql = rtrim($sql, ', ');

В SQL запросе выше DataAssign в данном случае я изменил на DataResult

И я пытался сделать querysets подобным образом, но это не дает желаемого результата.

1.  dataResult = DataResult.objects.filter(master__in=dataMaster.values('id'),cek = 0).values('status_id','tgl_waktu_update__date').annotate(count = Count('tgl_waktu_update__date')).annotate(total = Count('status_id')).order_by('-tgl_waktu_update__date')
data_resultAll = DataResult.objects.filter(master__in=dataMaster.values('id')).filter(cek = 0)

2.  
status_id = StatusCollect.objects.all()
for i in status_id:
    stats_id = i.id
    result = DataResult.objects.filter(master__in=dataMaster.values('id') , cek = 0
                                       ).values('status_id','tgl_waktu_update__date'
                                                ).annotate(count = Coalesce(Count('status', filter= ~Q(status = stats_id)),V(0)),
                                                                         total = Count('status_id')
                                                           ).order_by('-tgl_waktu_update__date')

Пожалуйста, помогите мне, как решить эту проблему, я застрял на 3 дня.

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