问题描述
我从Django开始,对Django-messages应用程序一目了然。我决定遵循他们的方式。感谢 parent_message 和 timestamp ,我们可以显示视图对话(发送者和接收者)。
在我的message_view.html中,我得到了最后一条消息(实际上是来自用户的消息),并且由于回复视图,我有可能回答该消息。
任何人都没有关于如何显示整个对话的想法。我进入了模板的前两个步骤:
- 最后一条消息(message.id,实际上是来自用户的消息)
- 回答形式()
- 所有对话(message.id的parent_messages和时间戳)
message / models.py
class Message(models.Model):
sender = models.ForeignKey(User,on_delete=models.CASCADE,related_name='sender')
receiver = models.ForeignKey(User,related_name='receiver')
message = models.CharField(max_length=1000)
parent_message = models.ForeignKey('self',related_name='next_messages',null=True,blank=True,on_delete=models.SET_NULL)
timestamp = models.DateTimeField(auto_Now_add=True)
read_at = models.DateTimeField(_("read at"),blank=True)
replied_at = models.DateTimeField(_("replied at"),blank=True)
#is_read = models.BooleanField(default=False)
def new(self):
if self.read_at is not None:
return False
return True
def replied(self):
if self.replied_at is not None:
return True
return False
def __str__(self):
return self.message
class Meta:
ordering = ('timestamp',)
def inBox_count_for(user):
return Message.objects.filter(receiver=user,read_at__isnull=True).count()
message / views.py
@login_required
def view(request,message_id,form_class=ComposeForm,quote_helper=format_quote,subject_template=_(u"Re: %(subject)s"),template_name='message_view.html'):
user = request.user
Now = timezone.Now()
message = get_object_or_404(Message,id=message_id)
if (message.sender != user) and (message.receiver != user):
raise Http404
if message.read_at is None and message.receiver == user:
message.read_at = Now
message.save()
context = {'message': message,'reply_form': None}
if message.receiver == user:
form = form_class(initial={
'message': quote_helper(message.sender,message.message),'receiver': [message.sender,]
})
context['reply_form'] = form
return render(request,template_name,context)
def reply(request,template_name='message_compose.html',success_url=None,receiver_filter=None,):
parent = get_object_or_404(Message,id=message_id)
if parent.sender != request.user and parent.receiver != request.user:
raise Http404
if request.method == "POST":
sender = request.user
form = form_class(request.POST,receiver_filter=receiver_filter)
if form.is_valid():
form.save(sender=request.user,parent_message=parent)
messages.info(request,_(u"Message successfully sent."))
if success_url is None:
success_url = reverse('message:messages_inBox')
return HttpResponseRedirect(success_url)
else:
form = form_class(initial={
'message': quote_helper(parent.sender,parent.message),'receiver': [parent.sender,]
})
return render(request,{
'form': form,})
templates / message_view.html
<div class="Box-comment">
<div class="card_user_image_left"><img src="{{ message.sender.userprofile.image.url }}" width="40px" height="40px" style="border-radius: 90px;background: #ffffff38;"></div>
<div class="card_user_message_left"><strong><a href="{% url 'user:user_public_cookwall' slug=message.sender.userprofile.slug %}" class="search_user_link">{{ message.sender }}</a> {{ message.sender.userprofile.smiley|safe }}</strong><small> {{ message.timestamp }}</small><p>{{ message.message|linebreaksbr }}</p></div>
</div>
<br>
<div>
<form action="{% url 'message:messages_reply' message.id %}" method="post">
{% csrf_token %}
{{ reply_form.as_table }}
<input type="submit" class="btn btn-primary single-input textinput textInput form-control" value="Reply to {{ message.sender }}"/>
</form>
</div>
</div>
message / urls.py
url(r'^reply/(?P<message_id>[\d]+)/$',reply,name='messages_reply'),url(r'^message/(?P<message_id>[\d]+)/$',view,name='messages_detail'),
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)