我有一个模特
class Notification(models.Model):
user = models.ForeignKey(User)
title = models.CharField(max_length=150)
body = models.ForeignKey(Question)
viewed = models.BooleanField(default=False)
def __unicode__(self):
return self.title
我想要实现的是获取尚未查看的通知,以及用户查看通知的时间应设置为Viewed = True。
我的通知与信息和问题标题完美配合。当用户单击通知时,它将转到问题的详细信息视图。
这里我希望在用户转到问题的详细信息视图时将通知设置为已查看。
我的模板文件是
{% for notification in notifications %}
<p><a href="{% url "question-detail" notification.body.id %}">{{notification.title}} </a></p>
{{notification.body}}
{% endfor %}
查看我的问题详情视图是:
class QuestionDetailView(DetailView):
context = {}
model = Question
template_name = "question-detail.html"
def get(self, request, pk, **kwargs):
self.pk = pk
return super(QuestionDetailView, self).get(request, pk, **kwargs)
def get_context_data(self, **kwargs):
context = super(QuestionDetailView,self).get_context_data(**kwargs)
context['question'] = Question.objects.get(pk=self.pk)
return context
,其网址为:
url(r'^question/(?P<pk>\d+)',QuestionDetailView.as_view(), name="question-detail"),
这里我想设置要查看的通知= True。如何获取通知的ID。在网址中,我已经得到了问题的身份。
答案 0 :(得分:2)
首先,当您使用基于类的视图时,您不需要自己获取对象。 让我们简化您的详细信息视图:
class QuestionDetailView(DetailView):
model = Question
template_name = "question-detail.html"
context_object_name = 'question'
此视图将产生与您的示例完全相同的行为。
接下来,让我们设置与查看的问题通知相关:
class QuestionDetailView(DetailView):
model = Question
template_name = "question-detail.html"
context_object_name = 'question'
def get_context_data(self, **kwargs):
context = super(QuestionDetailView,self).get_context_data(**kwargs)
q = context['question']
Notification.objects.filter(body=q, viewed=False).update(viewed=True)
return context
<强>已更新强>
要将完全通知标记为已查看,请在网址中提供相应的通知ID。这是怎么做的:
urls.py
(r'^question/(?P<pk>\d+)(?:/(?P<npk>\d+))?',QuestionDetailView.as_view(), name="question-detail"),
views.py
class QuestionDetailView(DetailView):
model = Question
template_name = "question-detail.html"
context_object_name = 'question'
def get_context_data(self, **kwargs):
context = super(QuestionDetailView,self).get_context_data(**kwargs)
q = context['question']
npk = kwargs.get('npk', None)
if npk:
Notification.objects.filter(pk=npk, body=q, viewed=False).update(viewed=True)
return context
template.html
{% for notification in notifications %}
<p><a href="{% url "question-detail" notification.body.id notification.id %}">{{notification.title}} </a></p>
{{notification.body}}
{% endfor %}
答案 1 :(得分:0)
这里你可以使用dajax技术当用户点击通知时写一个函数如onclick =“MakeItAsTrue({{notificaation.id}})”在这个函数中传递参数作为通知id,在函数中调用dajax并采取相应的用户并使通知查看= True,然后保存(),它将工作