-1

だから、私は DateTimeField データのかなり純粋な知識であり、助けに感謝します. タスクは、1 日に 1 つの投稿のみを作成できる機能をユーザーに追加することです。前回の投稿の日付があり、今日の日付で確認して、許可を得るかどうかを確認する必要があります。

datetimefield データが今日の日付であることを確認するにはどうすればよいですか?

コードで見てみましょう。何かがおかしい:

class Board (models.Model):

    @property
    def pub_allowed(self):
       try:
           last_post_day = self.post_set.all()[self.post_set.count() - 1].created
           if last_post_day == utc.localize(datetime.datetime.today()):
                return False

           return True

       except Post.DoesNotExist:
           return True

class Post (models.Model):
    title = models.CharField (max_length=30)
    description = models.CharField (max_length=120)
    created = models.DateTimeField (editable=False)
    board = models.ForeignKey (Board)

    def save(self, *args, **kwargs):
        ''' On save, update timestamps '''
        if not self.id:
            self.created = datetime.datetime.today()

        return super(Post, self).save(*args, **kwargs)

常に True を返すようになりました ((

4

1 に答える 1

0

最初の提案:

created = models.DateTimeField (editable=False, auto_now_add=True)

auto_now_addロジックを使用すると、独自のカスタムsave()メソッドを作成する必要がなくなります。

2番:

last_post_day = self.post_set.all()[self.post_set.count() - 1].created
....

これは時間もチェックしますが、まったく別の日にいる必要があるため、これは望ましくありません。これを次のように書き直すことから始めることができます。

last_post_day = self.post_set.all()[-1].created.day
return last_post_day >= utc.localize(datetime.datetime.today()).day

もちろん、これは月を変更するときに完璧ではDateありませんが、値だけをチェックして をチェックしないように少し調整するだけDateTimeで十分です。また、時間を気にしない場合は、 に直接変換DateTimeFieldしてDateField、日付を比較することもできます。

created = models.DateField (editable=False)
...
...
last_post_day = self.post_set.all()[-1]
return last_post_day >= datetime.date.today()
于 2013-09-18T14:29:38.240 に答える