2016-10-10 3 views
0

저는 장고의 고급 개념을 처음 접했고 사용자 정의 메소드와 같은 개념의 적용에 대해 다소 혼란 스럽습니다.Django의 쿼리 세트에 클래스 메소드 적용

기본적으로이 간단한 예는 내 목표를 가장 잘 설명합니다. 두 가지 클래스, 즉 공급 업체와 주문이 있습니다. 각 주문에는 공급 업체가 있습니다. 모델은 다음과 같이 : 보시다시피

class Order(models.Model): 
    vendor_agreement = models.ForeignKey(VendorAgreement, on_delete = models.CASCADE) 
    @property 
    def get_vendor_agreement(self): 
     .... 
     return result 

, 나는 모든 비즈니스 로직 orderget_vendor_agreement 방법에 캡슐화 vendor_agreement 사이에 있습니다.

질문order의 검색어에 해당하는 별개의 vendor_agreements의 목록을 얻을 수있는 우아한 방법이 있나요? 제 말은, Order.objects.filter(...).vendor_agreement()과 같은 것이고, 이는 서로 다른 공급 업체 계약 목록을 반환합니다. 미리 감사드립니다. 공식 documentation에서

답변

2

: 위의 예에서

from django.db import models 

class Reporter(models.Model): 
    # ... 
    pass 

class Article(models.Model): 
    reporter = models.ForeignKey(Reporter, on_delete=models.CASCADE) 

, 방법은 아래의 관리자 reporter.article_set에 사용할 수 있습니다.

또한 prefetch_related 메서드를 사용하여 하나의 쿼리에 데이터를 결합 할 수 있습니다. 한 번만 데이터베이스를 칠 것입니다 내 예에서

order_list = Order.objects.filter(...).prefetch_related('vendor_agreement') 
for order in order_list: 
    print order 
    for vendor_agreement in order.vendor_agreement_set.all(): 
     print vendor_agreement 

코드 : 귀하의 경우 코드에서

처럼 보일 것입니다.

+0

prefetch_related 아니고 select_related ...하지만 어쨌든 -이 문서를 읽으십시오 : https://docs.djangoproject.com/en/1.10/ref/models/querysets/ –