Django-在model.py中使用forloop来分配外键



我有两个模型——User和Rank。在def save()过程中,我希望根据用户拥有的点数和Rank模型中的min_points,将Users Rank自动分配给Rank。

型号

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()

现在,我在User模型中添加了save()函数,以检查用户点并与正确的Rank 进行比较

# ...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抛出警告:类"Rank"的未解析属性引用"objects">

我错过什么了吗?我想不通这个问题。。。

不需要枚举Rank对象。我们可以用检索具有小于或等于self.points的最大min_points量的Rank

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

最新更新