Django - forloop в model.py для присвоения иностранного ключа

У меня есть две модели - User и Rank. Во время def save() я хочу, чтобы ранг пользователя автоматически присваивался рангу в зависимости от количества очков пользователя и min_points из модели 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()

Сейчас я добавил функцию save() в модель User, чтобы проверить очки пользователя и сравнить с правильным Рангом

# ...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)

К сожалению, ничего не происходит после сохранения или создания нового пользователя.

My IDE throw warning: Unresolved attribute reference 'objects' for class 'Rank'

Я что-то упустил? Я не могу разобраться в этом вопросе...

Нет необходимости перечислять объекты Rank. Мы можем получить Rank с наибольшим количеством min_points, которое меньше или равно self.points с:

def save(self, *args, **kwargs):
    self.rank = Rank.objects.filter(
        min_points__lte=self.points
    ).latest('min_points')
    return super().save(*args, **kwargs)
Вернуться на верх