Возможно ли преобразовать этот 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 дня.