Django相关对象和null外键

时间:2016-01-21 14:37:40

标签: python django model

我想在我的网页上制作促销系统。

我想要的选择很少:

  • 为所有产品提供客户折扣
  • 为其中一种产品提供客户折扣
  • 为所有客户提供其中一种产品的折扣

如何制作模型来实现它? 我想在Promotion模型中使用可以为空的外键,但是如何在Product模型中使用相关对象,因为我用外键等同于客户端外键并且所有外键都是NULL?

或者也许可以将一些经理添加到产品型号中,我会根据客户的ID来搜索促销价格?

1 个答案:

答案 0 :(得分:2)

你的可设计领域的设计非常好。你只需要一些薄的包裹物。

假设您要为当前用户选择所有促销活动。也就是说,用户选择的促销或没有指定用户的促销。使用Django很容易实现这一点:

from django.db.models import Q

class PromotionQuerySet(models.QuerySet):
    def for_user(self, user):
        return self.filter(Q(user=user) | Q(user__isnull=True))


class Promotion(models.Model):
    user = models.ForeignKey(User, null=True)

    objects = PromotionQuerySet.as_manager()


# and later in your code, say, in the view:
active_promos = Promotion.objects.for_user(request.user)

Product字段也是如此。