Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在Django rest框架中创建带关系的模型_Python_Django Rest Framework - Fatal编程技术网

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,则读取消息。现在,数据库中存在重复数据。