Представление уровней членства Django Models

Итак, у меня есть модель в Django, которая представляет филиалы. Пользователь получает комиссию за каждого полученного реферала. Сколько получает реферер, зависит от уровня пользователя. Уровень пользователя зависит от того, сколько у них рефералов. До 5 рефералов = Базовый, до 10 рефералов = Средний, до 15 рефералов = Продвинутый.

Как я могу кодировать модель, чтобы уровень пользователя автоматически определялся количеством рефералов, которое имеет партнер? Допустим

class Affiliate(models.Model):
    user= models.OneToOneField(User)
    affiliate_id = models.PositiveIntegerField(primary_key=True)
    referral_id = models.PositiveIntegerField(blank=False, null=False)
    user_level = (
('B', 'Basic'),
('I', 'Intermediate'),
('A', 'Advanced'),
 default='B')
    referred_by = models.ForeignKey(referral_id, default=1)

1 ответ

Решение

Ты не можешь

Модель Django (или база данных, лежащая в ее основе) - это статические данные. Для принятия решений во время выполнения методы Model предназначены для:

class Affiliate(model.Model):
    affiliate_id = models.PositiveIntegerField(primary_key=True)
    …

    def user_level(self):
        levels = [(5, 'B'), …]
        for referrals, category in levels:
             if self.some_field < referrals:
                 return category 

Хорошая вещь о методах Model заключается в том, что они ведут себя как поля Model в остальной части фреймворка. Не ясно, что в вашей партнерской модели есть количество рефералов, поэтому я использовал some_field на своем месте. В зависимости от того, насколько управляемым данными вы хотите, чтобы этот поиск был, он может гарантировать свою собственную модель.

Учебник по django охватывает методы Model в своем первом разделе, что заставляет меня поверить, что вопросы о них были довольно распространенными.

Другие вопросы по тегам