python - Django - model.py 中的 forloop 分配外键
问题描述
我有两个模型 - 用户和排名。在 def save() 期间,我希望根据用户拥有的点数和 Rank 模型中的 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 抛出警告: 类 'Rank' 的未解析属性引用 'objects'
我错过了什么吗?我想不通这个问题...
解决方案
无需枚举Rank
对象。我们可以检索Rank
最大数量min_points
小于或等于self.points
with 的 :
def save(self, *args, **kwargs):
self.rank = Rank.objects.filter(
min_points__lte=self.points
).latest('min_points')
return super().save(*args, **kwargs)