当另一个模型的另一个字段值更改时,如何修改模型的字段值?

时间:2021-08-01 18:14:48

标签: python django

我有4个模型:声誉、金徽章、银徽章和青铜徽章,当声誉模型得分达到100分时,想在青铜徽章模型中加1,这必须自动完成

这是我的模型

class reputation(models.Model):
    score=models.BigIntegerField(default=0)
    user=models.ForeignKey(User,on_delete=models.CASCADE,related_name="reputation_user")
    def __str__(self):
        return self.score

class goldBadge(models.Model):
    score=models.BigIntegerField(default=0)
    user=models.ForeignKey(User,on_delete=models.CASCADE,related_name="goldbadge_user")
    def __str__(self):
        return self.score

其他型号几乎相同

我担心的是,在保存信誉模型时,我们会首先检查分数是否大于或等于 100,如果是,则将铜牌的值增加 1

我只是 python 和 django 的初学者,所以你的帮助对我很有帮助,谢谢你的回答

1 个答案:

答案 0 :(得分:0)

您可以创建一个帖子信号,该信号将根据声誉模型进行检查并更改青铜徽章模型。

可以在下面找到它的片段:

@receiver(post_save, sender=reputation)
def update_badge(sender, instance, created, **kwargs):
    if instance.score > 100:
        user_bronze = bronzebadge.objects.filter(user=instance.user)[0]
        user_score = user_bronze.score + 1
        user_bronze.score = user_score
        user_bronze.save()

您可以找到信号教程 here

相关问题