[英]Creating Model with Relations in Django-rest-framework
我如何设置一个字段
is_read = models.IntegerField(choices=message_status, default=SENT)
message = models.CharField(max_length=1200)
sent_time = models.DateTimeField(auto_now_add=True)
read_time = models.DateTimeField()
在这里, read_time
应该是时候is_read
成为一个
现在您的模型有数据重复。 事实上,这将有可能is_read
是0
,但read_time
设置。 您可以尝试定义视图来防止这种情况发生,但这将是具有挑战性的:每个视图都需要仔细编写以确保做到这一点。 此外,您可以在 Django 之外操作您的数据库。
使read_time
空可能会更好:
from django.utils.timezone import now
class Message(models.Model):
message = models.CharField(max_length=1200)
sent_time = models.DateTimeField(auto_now_add=True)
read_time = models.DateTimeField(null=True)
@property
def is_read(self):
return self.read_time is not None
@is_read.setter
def is_read(self, read):
if self.read != self.is_read:
if read:
self.mark_read()
else:
self.mark_unread()
def mark_read(self, save=True):
self.read_time = now()
if save:
self.save()
def mark_unread(self, save=True):
self.read_time = None
if save:
self.save()
因此,如果您将消息标记为已读,则将read_time
保存到当前时间戳。 此外,我们定义一个属性.is_read
是True
的情况下, read_time
不None
。 您还可以设置some_message.is_read = True
将read_time
更新为现在,并使用some_message.is_read = False
将read_time
设置回None
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.