2012-08-31 48 views
3

我有兩個類:A和B.每個A有一個有序的Bs排名,並且每個B有一個有序排列的As。Django:對象的有序列表的高效模型

我的models.py:

class A(models.Model): 
    name = models.CharField(max_length=200) 
    ... 

class B(models.Model): 
    name = models.CharField(max_length=200) 
    ... 

class Ranking(models.Model): 
    a = models.ForeignKey(A) 
    b = models.ForeignKey(B) 
    rankofa = models.IntegerField() 
    rankofb = models.IntegerField() 

什麼,我需要做的例子:

  • 找到作爲一個B已經位列號。
  • 迭代通過所有民宿按特定的一個排名和評價B.的某些屬性
  • 進入到A的最低評級爲B,而爲了找到由B到該A.
給出的排名

我想將排名設置爲一個數組/對象列表(或者一些不會進行昂貴的數據庫調用的方式),但不知道如何將其作爲Django模型/數據庫解決方案來實現。

任何和所有的想法讚賞。

回答

2

你需要的是intermediary M2M relation

class Seller(models.Model): 
    name = models.CharField(max_length=200) 

class Customer(models.Model): 
    name = models.CharField(max_length=200) 
    feedbacks = models.ManyToManyField(Seller, through='Feedback', related_name='feedbacks') 

class Feedback(models.Model): 
    seller = models.ForeignKey(Seller) 
    customer = models.ForeignKey(Customer) 
    seller_feedback = models.IntegerField() 
    customer_feedback = models.IntegerField() 

找賣家用戶的數量已位居:通過一個特定的賣家排名所有客戶

customer.feedbacks.all().count() 

迭代爲了和評估一些顧客財產。

for customer in seller.feedbacks.all(): 
    do_something(customer) 

轉到賣家排名最低的客戶,並找到該客戶給予該賣家的排名。

def lowes_feedback_response(seller): 
    try: 
     return models.Feedback.filter(seller=seller).order_by('-seller_feedback')[0].customer_feedback 
    except models.Feedback.DoesNotExist: 
     return None 

我沒有評估的代碼,但你得到的基本思路

相關問題