2013-10-03 2 views
1

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

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

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) 

ответ

0

Вы не можете.

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

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 

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

django tutorial covers Model methods в своем первом разделе, что заставляет меня поверить, что вопросы о них довольно распространены.

+0

Большое спасибо. Я хотел, чтобы некоторые заверения были честными. Я подумывал об использовании модельного метода, но я хотел, чтобы кто-то более опытный, чтобы дать мне возможность идти вперед. – Iohannes

Смежные вопросы