python=3.7.0
django=(2, 0, 2, 'final', 0)
の環境で開発しています。
前提・実現したいこと
以下のようなmodelがあるのですがそこに公開期限を設定しています。
python
1 2#models.py 3 4class Question(models.Model): 5 question_text = models.CharField(max_length=200) 6 pub_date = models.DateTimeField('date published') 7 date_limit = models.DateTimeField('公開期限', default = datetime.datetime.now ) 8 9 10 def was_published_recently(self): 11 now = timezone.now() 12 return now - datetime.timedelta(days=1) <= self.pub_date <= now 13 was_published_recently.admin_order_field = 'pub_date' 14 was_published_recently.boolean = True 15 was_published_recently.short_description = 'Published recently?' 16
この公開期限が現在の時間(pud_dateで設定した時間ではなく実際の現在時刻)を過ぎるとフィルターがかかり、投票ができないようにしたいと思っています。
date_limitよりも前の時間
試したこと1
{% if datetime.datetime.now <= date_limit %}
で現在時刻が公開期限を超ていない場合のみ公開にしようとしましたが常にフィルターがかかっている状態になります。
html
1 2#detail.html 3 4{% extends 'polls/base.html' %} 5{% block content %} 6<strong>{{ question.question_text }}の投票画面</strong> 7 8<br> 9<strong><a href="{% url 'polls:results' question.id %}">結果を見る</a></strong> 10 11{% if datetime.datetime.now <= date_limit %} 12 13{% if error_message %}<p><strong>{{ error_message }}</strong></p>{% endif %} 14 15<form action="{% url 'polls:vote' question.id %}" method="POST"> 16 {{ form.non_field_errors }} 17 {% for field in form %} 18 <div class="form-group"> 19 <label for="{{ field.id_for_label }}">{{ field.label_tag }}</label> 20 {{ field }} 21 {{ field.errors }} 22 </div> 23 {% endfor %} 24 {% csrf_token %} 25 <button type="submit" class="btn btn-dark">送信</button> 26</form> 27 28{% endif %} 29 30{% endblock %}
試したこと2
公開期限を過ぎるとresultsページにリダイレクトするか試してみましたが関数自体が動いておらず特になにも変化がありませんでした。
python
1 2#views.py 3 4class DetailView(ModelFormMixin, generic.DetailView): 5 model = Question 6 template_name = 'polls/detail.html' 7 form_class = ChoiceCommentForm 8 9 def was_published_recently(self, question_id): 10 now = timezone.now() 11 if self.date_limit <= now: 12 return redirect('polls/results', pk=question_id)
追加情報など必要ならば適宜公開せていただきます。
ページネーションのフィルターをかける情報はかなりあるのですが公開時間に応用することがうまくいかなく、情報もほぼなかったため質問させていただきました。
よろしくお願いいたします。

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。