установить значение нового поля в зависимости от другого поля - PullRequest
0 голосов
/ 07 ноября 2019

Я хочу установить значение нового поля в зависимости от другого поля. Чтобы рассмотреть, я хочу удалить like_count после установки значения like_status. Первая попытка:

my model.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'

Я могу достичь своей цели, запустив скрипт, но я хочу знать способ выполнения этого процесса без scripting.thank. ты за свое время

1 Ответ

0 голосов
/ 07 ноября 2019

Вы можете использовать Методы модели , чтобы установить значение 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...