2012-08-31 2 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 위를 기록했다과의 수를 찾습니다.
  • 으로 반복 모든
  • 이동하는 A의 가장 낮은 순위 B에 특정 (A)에 의해 순위와 B의 몇 가지 속성을 평가 B에, 그리고를 통해 순서대로 그 A.
해당 B에 의해 주어진 순위를 찾을 수

배열/객체 목록 (또는 비싼 데이터베이스 호출을 계속하지 않는 방법)으로 순위를 설정하고 싶지만 Django 모델/데이터베이스 솔루션으로이를 수행하는 방법을 모릅니다.

모든 의견을 환영합니다. 특정 판매자에 의해 평가하는 모든 고객을 통해 순서

customer.feedbacks.all().count() 

으로 반복 일부 고객 재산을 평가 : 당신이 필요로하는 무엇

답변

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() 

입니다.

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 

나는 코드를 평가하지 않았다하지만 당신은 기본 아이디어를 얻을

관련 문제