2017-09-14 11 views
0

私は従業員と葉の種類がカジュアル、病気、休暇、出産、父親のように各人によって適用されている...私は、土、現在の年の日2017Django:タイプに基づいて合計を検索するクエリ

Eg: 
person 1 applied sick leave from 11th sept,Mon 2017 to 13 sept,Wed 2017--3 days 
person 1 applied sick leave from 14th sept,Thu 2017 to 15 sept,Fri 2017--2 days 

person 1 applied Casual leave from 14th ,Thu 2017 to 15 sept,Fri 2017--2 days 
person 1 applied Vacation leave from 18th ,Mon 2017 to 26 sept,Tue 2017--7 days excluding sat,sun 

その後、私は

| leave type|count| 
| vacation | 7 | 
| casual | 2 | 
| sick  | 5 | 

これは、単一の従業員のためにあるの形でテーブルを必要とする除くleave_typesは...私も社員一人ひとりのためにそれを必要とします

models.py

class employees(models.Model): 
    emp_name = models.CharField(max_length = 100) 
    emp_loc = models.CharField(max_length = 100) 
    manager_id=models.IntegerField(null=True) 

class leave(models.Model): 
    employee = models.ForeignKey(employees, on_delete=models.CASCADE, default='1') 
    start_date = models.DateField() 
    end_date = models.DateField() 
    l_type=models.CharField(max_length=1) 

答えて

0

あなたは私はあなたがこれらの変更を加えることによってそれを行うことができると思います。この

from django.db.models import Count 
    leave.objects.all().values('l_type').annotate(count=Count('l_type')). 
            order_by('l_type') 
+0

ここでは、ステータスが病気で、クエリでは休暇であるが、特定のタイプの休暇のstart_dateとend_dateの間にカウントされていない回数が表示されます。 – divya

+0

質問は何ですか? – Robert

0

試すことができます。

class leaves(models.Model) 
    employee = models.ForeignKey(employees, on_delete=models.CASCADE, default='1') 
    start_date = models.DateField() 
    end_date = models.DateField() 
    duration = models.DurationField(null=True) 
    l_type = models.CharField(max_length=20) 

    def save(self, force_insert=False, force_update=False, using=None, 
     update_fields=None): 
     self.duration = (self.end_date - self.start_date) 
     return super(Leaves, self).save() 

(保存)は、ときに自動的に期間を計算しますオブジェクトが作成されます。

leave_length = leaves.objects.filter(l_type='vacation').aggregate(Sum('duration'))['duration__sum'].days 

集計(SUM(「フィールド名」))に関連した合計値を持つ辞書を返し:今

は、特定の種類の葉の日数の合計、「休暇」を言うのを取得します平日を除くために名前 fieldname__sum、私たちの場合は duration__sum

キーは、この質問の答えを参照してください。 Count number of days between dates, ignoring weekends

+0

ここでは、特定のタイプのそれぞれの休暇ごとに休暇を取ることができますが、例で述べたように特定のタイプの休暇を合計する方法はあります。 – divya

+0

{{leave.leave_length}}にも時刻が表示されます Eg.Sept。 15日、2017〜22日、2017年9月22日、0:00:00時間の除外方法0:00:00 – divya

+1

{{leave.leave_length.days}}を試す –

関連する問題