python - 如何设置模型属性,在 Django 查询中切换布尔值?
问题描述
是否可以在下面的详细视图中将模型中的布尔值设置为 false ?我查看了 django 文档(查询集),寻找类似的.set()
方法,它似乎存在但不适用于这种特殊情况。如何通过我的视图切换我的unread
布尔值?Models.py
另外,我在这里误解了什么,更好/合适的方法是什么?
模型.py:
class Message(models.Model):
recipient = models.ForeignKey(CustomUser, on_delete = models.CASCADE,related_name = 'recipient',null = True)
sender = models.ManyToManyField(CustomUser,related_name = 'messages')
date = models.DateTimeField(auto_now_add=True, blank=True)
subject = models.CharField(max_length = 1000, blank = True)
message = models.TextField(blank=True, null=True)
unread = models.BooleanField(default = True)
视图.py:
### Message detail class
class MessageInboxDetail(DetailView):
'''
This view lets the user view the details of a message created
'''
context_object_name = 'message_detail'
model = Message
template_name = "myInbox/message_detail.html"
def get_context_data(self, **kwargs):
context = super(MessageInboxDetail, self).get_context_data(**kwargs)
context.update({
'message_detail': Message.unread.set(False) }) # Message(unread=True/False)
return context
解决方案
您不是通过.set(..)
调用来设置模型实例的字段,而是通过分配给属性(在幕后,Django 已经修补了__get__
and__set__
函数)。
因此,我们可以message
通过从上下文中检索对象来获取对象(使用context['message_detail']
,然后更改它的状态,最后将更新的版本保存到数据库中。例如:
class MessageInboxDetail(DetailView):
'''
This view lets the user view the details of a message created
'''
context_object_name = 'message_detail'
model = Message
template_name = "myInbox/message_detail.html"
def get_context_data(self, **kwargs):
context = super(MessageInboxDetail, self).get_context_data(**kwargs)
message = context['message_detail']
message.unread = False
message.save()
return context
但是,我不知道在详细视图中将消息标记为已读是否是个好主意,这可能会导致代码重复,这通常不是一个好主意。
推荐阅读
- c# - Unity:停止角色上山(最后位置和当前位置之间的角度?!)
- scala - 如何在scala中访问spark数据框的列索引以进行计算
- mysql - SUBQUERY 和 INNER JOIN - MySQL 和 SQL 之间的区别
- coldfusion - ColdFusion RecordCount 作为多个条件
- matlab - Matlab中的拉格朗日插值问题
- java - 模糊的 SharedPreference ,BadPaddingException:垫块损坏
- javascript - 在nwjs中下载文件时如何显示进度条
- angular - 在进行一些更改后,将 Angular 5 升级到 6 应用程序在开发模式下工作,但在构建生产后无法工作
- php - Woocommerce 股票的 Wordpress 更新帖子元
- javascript - 如何将 querySelectorAll 与变量一起使用?