Django - model.py 中的 forloop 分配外键

Django - forloop in model.py to assign foreignkey

我有两个模型 - 用户和排名。在 def save() 期间,我希望根据用户拥有的点数和排名模型中的 min_points 自动将用户排名分配给排名。

型号

class User(AbstractUser):
    points = models.IntegerField(default=0)
    rank = models.ForeignKey(Rank, on_delete=models.SET_NULL, null=True, blank=True)


class Rank(models.Model):
    rank = models.CharField(max_length=200)
    min_points = models.IntegerField()

现在我向用户模型添加了 save() 函数来检查用户点数并与正确的排名进行比较

# ...user model
def save(self, *args, **kwargs):
    for i in Rank.objects.all():
        if self.points >= i.min_points:
            self.rank == Rank.objects.get(id=i.id)
    super().save(*args, **kwargs)

不幸的是,保存或创建新用户后没有任何反应。

我的 IDE 抛出警告: 未解析的属性引用 'objects' class 'Rank'

我错过了什么吗?我无法弄清楚问题...

无需枚举 Rank 个对象。我们可以检索 Rank 的最大数量 min_points 小于或等于 self.points

def save(self, *args, **kwargs):
    self.rank = Rank.objects.filter(
        <strong>min_points__lte=self.points</strong>
    )<strong>.latest('min_points')</strong>
    return super().save(*args, **kwargs)