根据其他字段设置新字段的值

时间:2019-11-07 07:21:07

标签: django model

我想根据其他字段来设置新字段的值。考虑到我想在设置2019-11-07T07:08:27.410Z 2625bba5-b8e1-40e4-8704-7c0d486f6dff INFO Success 2019-11-07T07:08:27.431Z 2625bba5-b8e1-40e4-8704-7c0d486f6dff INFO Success 的值后删除like_count首次尝试:

我的模型。py:

like_status

现在我想向显示我的class Post(Model): title = models.CharField( max_length=100) like_count = models.IntegerField(default=0) 模型添加新字段,无论该帖子是否喜欢:

Post

运行迁移后,class Post(Model): title = models.CharField( max_length=100) like_count = models.IntegerField(default=0) like_status = models.BooleanField(default=False if str(F('like_count')) == 0 else True) 的所有值为like_status,而存在一些带有True的Post对象


第二次尝试:like_count=0添加为默认值like_status

False

然后尝试更新class Post(Model): title = models.CharField( max_length=100) like_count = models.IntegerField(default=0) like_status = models.BooleanField(default=False) 字段:

like_status

错误:

Post.objects.all().update(like_status=True if F('like_count')>0 else False)

然后尝试:

'>' not supported between instances of 'F' and 'int'

错误:

Post.objects.all().update(like_status=True if int(F('like_count'))>0 else False)

我可以通过运行脚本来实现我的目标,但是我想知道无需编写脚本即可完成此过程的方法。谢谢您的时间

1 个答案:

答案 0 :(得分:0)

您可以使用Model methods来设置like_status的值:

class Post(models.Model):
    title = models.CharField( max_length=100)
    like_count =  models.IntegerField(default=0)

    @property
    def like_status(self):
        if self.like_count == 0:
           return False 
        else :
           return True