首页 > 解决方案 > 根据其他字段设置新字段的值

问题描述

我想根据其他字段设置新字段的值。考虑我想like_count在设置like_status值后删除。 第一次尝试:

我的模型.py:

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)

错误:

int() argument must be a string, a bytes-like object or a number, not 'F'

我可以通过运行脚本来实现我的目标,但我想知道在没有脚本的情况下执行此过程的方式。谢谢您的时间

标签: djangomodel

解决方案


您可以使用Model 方法来设置 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

推荐阅读