Django模型方法无法更新模型字段

1 投票
2 回答
1126 浏览
提问于 2025-04-17 18:20

我有一个模型对象,它里面有两个方法:expiredpending。过期的管理器工作得很好,可以更新字段。而待处理的管理器却不行。以下是我的代码。

顺便提一下:我在一个视图中把待处理设置为真。

models.py:

class Job(models.Model):
    expired=models.BooleanField(default=False)
    pending=models.BooleanField(default=False)
    purchased=models.DateTimeField(auto_now_add=True)
    time=models.PositiveIntegerField(blank=False)


    def job_expired(self):
        time=self.time
        date=self.purchased
        end=date+timedelta(days=time)
        #now is defined globally
        if now > end:
            ex=self.expired=True
            #i've tried these two ways below
            self.pending=False
            #or
            ax=self.pending=False
            ax.save()
        else:
            ex=self.expired=False
        return ex

我再强调一下,更新过期字段是没问题的,但待处理字段却不行。我还尝试了一个单独的方法:

       def job pending(self):
            if self.expired:
                self.pending=False

这些选项都似乎不管用。有人能帮我一下吗?谢谢。

2 个回答

1

为了让更改生效,你需要先更新模型,然后再保存它:

  1. self.pending = False (把待处理状态设为假)
  2. self.save() (保存更改)

另外,我觉得你是想说field(字段),而不是manager(管理器)。想了解更多,可以查看模型管理器的相关信息。

2
def job_expired(self):
    time=self.time
    date=self.purchased
    end=date+timedelta(days=time)
    #now is defined globally
    if now > end:
        self.expired = True
        self.pending = False 
        self.save()

        ex = self.expired
    else:
        ex=self.expired=False
    return ex

当然可以!请把你想要翻译的内容发给我,我会帮你用简单易懂的语言解释清楚。

撰写回答