我有两个模型——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)