Python 在Django rest框架中创建带关系的模型
如何设置一个Python 在Django rest框架中创建带关系的模型,python,django-rest-framework,Python,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() 这里的读取时间应该是正在读取时的时间此时您的模型有数据重复。实际上,是读取的是0,但是
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()
这里的
读取时间
应该是正在读取时的时间此时您的模型有数据重复。实际上,是读取的
是0
,但是读取时间
是设置好的。您可以尝试定义视图以防止出现这种情况,但这将是一个挑战:每个视图都需要仔细编写以确保。此外,您还可以在Django之外操作数据库
最好将读取时间设置为空:
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()
从django.utils.timezone立即导入
类消息(models.Model):
message=models.CharField(最大长度=1200)
发送时间=models.DateTimeField(自动现在添加=True)
read_time=models.DateTimeField(null=True)
@财产
def已读取(自):
返回self.read\u时间不是无
@这是你的读物
def已读(自身,已读):
如果自读!=self.u如下所示:
如果改为:
self.mark_read()
其他:
self.mark_未读()
def标记_读取(自身,保存=真):
self.read_time=now()
如果保存:
self.save()
def mark_未读(self,save=True):
self.read\u time=无
如果保存:
self.save()
因此,如果您将消息标记为已读,则将read\u time
保存到当前时间戳。此外,如果读取时间
不是无
,我们定义了一个属性.is\u read
,即真
。您还可以进一步设置some_message.is_read=True
将read_time
更新到现在,并使用some_message.is_read=False
将read_time
设置回None
,乍一看,最好不要有is_read
字段,但只需将读取时间设为空即可。如果不为null,则读取消息。现在,数据库中存在重复数据。