0

这是我的模型和视图。我有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 

回答

0

我想补充的方法来Ancillary返回给定用户的折扣价。然后,您可以从您的视图中调用它,传递登录的User

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

你还没有说过你是如何定义这些不同类型的用户的。最一般的解决方案是自定义您的User对象(或使用User配置文件)以指向其类型,其中该类型是提供相关折扣的另一个型号。然后,您可以在不对任何内容进行任何硬编码的情况下控制管理员的类型和折扣金额。

+0

是否与多对多的关系? – vvdect

+0

@wdect:这取决于用户是否可以有多种类型。从你所说的我不认为,在这种情况下,它只是一个'ForeignKey'。 –