首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >打开邮件时将BooleanField从False更改为True

打开邮件时将BooleanField从False更改为True
EN

Stack Overflow用户
提问于 2018-06-08 05:17:35
回答 1查看 119关注 0票数 0

我已经在Django框架上创建了自己的消息引擎,让用户可以互相发送消息,下面是我的消息模型

models.py

代码语言:javascript
复制
class Message(models.Model):
    sender = models.ForeignKey(UserModel, related_name="sender", on_delete='CASCADE')
    receiver = models.ForeignKey(UserModel, related_name="receiver", on_delete='CASCADE')
    msg_title = models.CharField(max_length=150, verbose_name='عنوان الرسالة', default='رسالة جديدة من مستخدم فوستانيا')
    msg_content = models.TextField(max_length=1200,verbose_name='محتوى الرسالة')
    created_at = models.DateTimeField(auto_now=True)
    read = models.BooleanField(default=False)

然后我列出了用户的消息,他们可以看到的消息与read=False作为一个新的消息,他们能够点击它来查看完整的消息,我希望阅读状态被更改为真后,用户点击模板的消息,怎么做!

urls.py

代码语言:javascript
复制
path('messages/', views.messages, name="messages"),
path('messages/<int:pk>/', views.message_page, name="message_page"),

views.py

代码语言:javascript
复制
@login_required
def messages(request):
    inbox = Message.objects.filter(receiver=request.user, read=True)
    context = {
        'inbox': inbox,
    }
    return render(request, 'fostania_web_app/messages.html', context)


def message_page(request, pk):
    current_msg = get_object_or_404(Message, pk=pk)

    context = {
        'current_msg': current_msg,
    }
    return render(request, 'fostania_web_app/message_page.html', context)

消息列表模板message.html

代码语言:javascript
复制
{% extends 'fostania_web_app/base.html' %}
{% block content %}
{% load static %}
                        {% if user.is_authenticated %}
<br><br>
<div class="card text-white bg-warning mb-3" style="max-width: 75rem;" align="right">
  <div class="card-header">رسائل جديدة  </div>
  <div class="card-body">
    <p class="card-text">
    {% if new_messages.count != 0  %}
        {% for msg in new_messages %}
            <a href="{% url 'message_page' msg.pk%}"><img src="{% static 'img/new-msg.png' %}"> {{ msg.msg_title }}</a>
            <br>
        {% endfor %}
        {% else %}
        لا توجد رسائل غير مقروءة
        {% endif %}
    </p>
  </div>
</div>
                            <!-- old msgs -->
<div class="card text-dark bg-ligh mb-3" style="max-width: 75rem;" align="right">
  <div class="card-header"><img src="{% static 'img/inbox.png' %}">  صندوق الوارد </div>
  <div class="card-body">
    <p class="card-text">
        {% for msg in inbox %}
            <a href="{% url 'message_page' msg.pk%}"><img src="{% static 'img/old-msg.png' %}"> {{ msg.msg_title }}</a><br>
        {% endfor %}

    </p>
  </div>
</div>


    {% else %}
    يتوجب عليك تسجيل الدخول اولاً
    {% endif %}

{% endblock %}

点击并传递其主键message_page.html后的消息体

代码语言:javascript
复制
{% extends 'fostania_web_app/base.html' %}
{% block content %}
{% load static %}
<Br><br>
<div class="card bg-light mb-3" style="max-width: 50rem;" align="right ">
  <div class="card-header">{{ current_msg.sender.name }}</div>
  <div class="card-body">
    <h5 class="card-title">{{ current_msg.msg_title }}</h5>
    <p class="card-text">{{ current_msg.msg_content }}
    <Br><br>
    <button class="btn btn-success">إرسـال رد</button>&nbsp;
        <a href="{% url 'messages' %}"><button class="btn btn-danger">رجوع للرسائل </button></a>
    </p>
  </div>
</div>

{% endblock %}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-08 06:04:27

您可以通过简单地更新正在读取的消息来避免太多的工作:

代码语言:javascript
复制
def message_page(request, pk):
    current_msg = get_object_or_404(Message, pk=pk)
    current_msg.read = True
    current_msg.save()

    context = {
        'current_msg': current_msg,
    }
    return render(request, 'fostania_web_app/message_page.html', context)

奖励:

而不是

代码语言:javascript
复制
{% if new_messages.count != 0  %}
    {% for msg in new_messages %}
        ''' '''
    {% endfor %}
{% else %}
    لا توجد رسائل غير مقروءة
{% endif %}

在循环内部,您可以检查msg是否被读取,而不是发送另一个查询集,因此您可以简单地这样做

代码语言:javascript
复制
{% for msg in new_messages %} # instead of new_messages, send all_messages
      {% if msg.read %}
          ''' old message '''
      {% else %}
          ''' new message '''
      {% endif %}
{% empty %}
   لا توجد رسائل غير مقروءة # don't really know what does that mean
{% endfor %}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50750292

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档