根据用户类型更改查询数据

时间:2013-08-28 15:36:30

标签: django django-models django-views django-class-based-views

这是我的模型和视图。我有3种类型的用户,每种产品分别获得30%+ 5%,30%+ 10%和20%+ 5%的固定折扣。有没有办法让我在没有硬编码模型中每个用户的价格的情况下完成它

from django.db import models
from django.core.urlresolvers import reverse

class Ancillary(models.Model):
    product_code = models.CharField(max_length=60, null=True)
    type = models.CharField(max_length=120, null=True)
    product = models.CharField(max_length=120, null=True)
    standard = models.CharField(max_length=120,   null=True)
    measurement = models.CharField(max_length=120,  null=True)
    brand = models.CharField(max_length=120,   null=True)
    price = models.Int(max_length=120,   null=True)

 class Meta:
      verbose_name_plural = "Ancillaries"
 def get_absolute_url(self):
      return reverse('ancillaries')
 def __unicode__(self):
      return u'%s %s %s %s %s %s  %s' % (self.id, self.product_code, self.type, 
                            self.product, self.standard, 
                            self.measurement, self.brand)


class AncillaryDetail(DetailView):
    model = Ancillary
    def get_context_data(self, **kwargs):

        context = super(AncillaryDetail, self).get_context_data(**kwargs)
        context['Ancillary_list'] = Ancillary.objects.all()
        return context   

1 个答案:

答案 0 :(得分:0)

我会向Ancillary添加一个返回给定用户折扣价的方法。然后,您可以在视图中调用它,并传入已登录的User

class Ancillary(models.Model):
    ...
    def get_discounted_price(self, user):
        # check type of user and return discounted price

您还没有说过如何定义这些不同类型的用户。最常见的解决方案是自定义您的User对象(或使用User配置文件)以指向其类型,其中类型是另一个给出相关折扣的模型。然后,您可以从管理员控制类型和折扣金额,而无需对任何内容进行硬编码。