繁体   English   中英

在 Django-rest-framework 中创建具有关系的模型

[英]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_read0 ,但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_readTrue的情况下, read_timeNone 您还可以设置some_message.is_read = Trueread_time更新为现在,并使用some_message.is_read = Falseread_time设置回None

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM