是否可以在下面的详细信息 View 中将模型中的 bool 值设置为 false ?
我浏览了 django 文档(queryset),寻找类似于 .set()
方法的内容,它似乎存在,但不适用于这种特殊情况。
如何通过我的 View 切换 Models.py
中的 unread
bool 值?
另外,我在这里误解了什么以及更好/合适的方法是什么?
模型.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)
View .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__
和 __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)
<b>message = context['message_detail']
message.unread = False
message.save()</b>
return context
但是,我不知道在详细 View 中将消息标记为已读是否是一个好主意,它可能会导致代码重复,这通常不是一个好主意。
关于python - 如何设置 Model 属性,在 Django 查询中切换 bool 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51748727/