【问题标题】:Django Messaging Framework in the save() functionsave() 函数中的 Django 消息传递框架
【发布时间】:2021-10-31 19:41:59
【问题描述】:

我正在检查一个模型实例是否已经存在,我是否想发送一条消息说“名称已经存在”。由于 def save() 中没有请求,有没有其他方法可以通过 Django 消息框架或其他方式发送消息??

def save(self, *args, **kwargs):
    self.name = self.name
    if Name.names.name_exists(self.name):
        message = "You already have this name!" # want to send this message
        print("not created")
    else:
        print("created")
        super(Name, self).save(*args, **kwargs)

【问题讨论】:

  • 我认为您不需要通过覆盖保存方法来检查对象名称是否存在。相反,您可以在创建新对象之前检查它,例如:myObject = Object.objects.get(name=name_to_check) 如果对象存在,则使用 django 消息 (from django.contrib import messages) 发送消息。如果不创建新对象。
  • 覆盖保存方法不是您的意思的最佳做法?
  • 对于这个特定的目标,是的,覆盖保存方法不是最好的主意(我认为)。您想在保存之前检查对象是否存在。然后在您的object 上调用.save() 之前执行此操作。

标签: django django-models django-rest-framework django-templates django-messages


【解决方案1】:

是的,您可以将 django 消息框架与 messages.warning(request, 'Object already exists.') 一起使用,而不是 print 语句,并且根据您的逻辑而不是警告消息,您可以发送成功或信息消息。您可以在您的模板中使用;

{% if messages %}
<ul class="messages">
    {% for message in messages %}
    <li{% if message.tags %} class="{{ message.tags }}"{% endif %}>{{ message }}</li>
    {% endfor %}
</ul>
{% endif %}

但此选项将可用于您的视图层而不是模型层。不要忘记结帐documentation

【讨论】:

  • 谢谢,但是保存方法没有请求对吗?
  • 是的,就像我说的,您可以在视图中使用消息框架,而不是在对象的 save 方法中。因为消息框架中的目标是将文本发送到您的模板并呈现它,以便您可以向用户发送消息:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-29
  • 1970-01-01
相关资源
最近更新 更多