【问题标题】:Alter query data according to user type根据用户类型更改查询数据
【发布时间】:2013-08-31 18:57:14
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    我将向Ancillary 添加一个方法,该方法返回给定用户的折扣价。然后你可以从你的视图中调用它,传入登录的User

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

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

    【讨论】:

    • @wdect:这取决于用户是否可以拥有多种类型。从你所说的我认为不是,在这种情况下它只是一个ForeignKey
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-07
    • 1970-01-01
    • 2016-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-21
    相关资源
    最近更新 更多