2016-01-21 71 views
0

我想在我的網頁上製作促銷系統。Django相關對象和空外鍵

而且我想幾個選項:

  • 給客戶的折扣,所有產品
  • 給客戶折扣的產品之一
  • 給所有客戶的折扣,對於產品的一個

如何爲了實現這個模型? 我想過在促銷模型中使用可爲空的外鍵,但是如何在產品模型中使用相關對象,因爲我使用等於客戶端外鍵的外鍵和外鍵= NULL的所有外鍵都進行了內部匹配。

或者,也許可以添加一些經理到產品模型,在那裏我會搜索促銷價格,取決於客戶的ID?

+2

請仔細閱讀django基礎教程,它在模型設計中做得很好,我相信你會從那裏學到更多,而不是在這裏。 –

回答

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場如此。