0

仕事の休暇申請を追跡する単純なモデルがあります。

class LeaveRequest(models.Model):
    employee = models.ForeignKey(UserProfile)
    supervisor = models.ForeignKey(UserProfile, related_name='+', blank=False, null=False)
    submit_date = models.DateField(("Date"), default=datetime.date.today)
    leave_type = models.CharField(max_length=64, choices=TYPE_CHOICES)
    start_date = models.DateField(("Date"))
    return_date = models.DateField(("Date"))
    total_days = models.IntegerField()
    notes = models.TextField(max_length=1000)

    def __unicode__ (self):
        return u'%s %s' % (self.employee, self.submit_date)

        class Admin: 
                pass

        class Meta:
                ordering = ['-submit_date']

ビューでは、要求された日数を計算する関数が必要です。次に、平日のみをカウントするメソッドが必要ですが、今のところ、次のものが用意されています。

def leave_screen(request, id):
    records = LeaveRequest.objects.filter(employee=id)
    total_days = LeaveRequest.return_date - LeaveRequest.start_date
    tpl = 'vacation/leave_request.html'
    return render_to_response(tpl, {'records': records })

属性エラーを生成する

type object 'LeaveRequest' has no attribute 'return_date

助言がありますか?

4

3 に答える 3

1

プロパティとして使用することを提案する答えは機能しますが、フィールドとして保持し、挿入時に計算することをお勧めします。

class LeaveRequest(models.Model):
    employee = models.ForeignKey(UserProfile)
    supervisor = models.ForeignKey(UserProfile, related_name='+', blank=False, null=False)
    submit_date = models.DateField(("Date"), default=datetime.date.today)
    leave_type = models.CharField(max_length=64, choices=TYPE_CHOICES)
    start_date = models.DateField(("Date"))
    return_date = models.DateField(("Date"))
    total_days = models.IntegerField()
    notes = models.TextField(max_length=1000)

    def __unicode__ (self):
        return u'%s %s' % (self.employee, self.submit_date)

    def save(self, *args, **kwargs):
        self.total_days = (self.return_date - self.start_date).days
        super(LeaveRequest, self).save(*args, **kwargs)

        class Admin: 
                pass

        class Meta:
                ordering = ['-submit_date']

このように、週末を除外するロジックを組み込むと、すべての休暇申請を一覧表示するたびに日数を計算するための計算を節約できます。

于 2013-01-11T21:31:31.593 に答える
1

total_days では、作成したモデルのインスタンスではなく、モデルを呼び出していrecordsます。

単一の Leave レコードのみを表示する場合は、その ID を渡す必要があります。LeaveRequest

def leave_screen(request, id):
    records = LeaveRequest.objects.get(id=id)
    total_days = records.return_date - records.start_date
    tpl = 'vacation/leave_request.html'
    return render_to_response(tpl, {'records': records })
于 2013-01-11T21:05:10.097 に答える
0

「total_days」を LeaveRequest クラスのフィールドとしてではなく、プロパティとして使用します。

class LeaveRequest(models.Model):
    (other fields)

    @property
    def total_days(self):
        oneday = datetime.timedelta(days=1)
        dt = self.start_date
        total_days = 0
        while(dt <= self.return_date):
            if not dt.isoweekday() in (6, 7):
                total_days += 1
            dt += oneday
        return totaldays

# view function
def leave_screen(request, id):
    # get leave request by id
    leavereq = LeaveRequest.objects.get(id=id)
    return render_to_response("vacation/leave_request.html", {"leavereq": leavereq})

# template code
...
<body>
    {{ leavereq.total_days }}
</body>
于 2013-01-11T21:17:59.157 に答える