【发布时间】:2021-10-28 05:59:45
【问题描述】:
我有两个模型 - 用户和排名。在 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”
我错过了什么吗?我无法弄清楚问题...
【问题讨论】:
-
self.rank == Rank.objects.get(id=i.id)不会做任何事情,因为这仅意味着您检查相等性,并且无论您做什么,它都不会对该信息做任何事情。 -
@WillemVanOnsem 好的,我该如何设置 self.rank 外键?
-
与
self.rank = ...,但你不应该一开始就枚举。您可以通过单个查询来解决此问题。
标签: python django django-models foreign-keys