2014-01-22 4 views
1

나는 다음과 같은 모델이 : 같은 카트와장고 모델 외래 키 관계

class Order(models.Model): 
    objects = OrderManager()  
    order_number = models.CharField(max_length=20, editable=False, unique=True, 
            default=get_unique_order_number) 
    user = models.ForeignKey(User)  
    cart = models.ForeignKey(Cart) 

class OrderItem(models.Model): 
    objects = OrderItemManager() 
    order = models.ForeignKey(Order, related_name="items") 
    product = models.ForeignKey(Product) 
    quantity = models.PositiveSmallIntegerField() 
    price = models.DecimalField(max_digits=6, decimal_places=2, default=0.00) 
    tax = models.DecimalField(max_digits=6, decimal_places=2, default=0.00) 
    ITEM_STATUS = (
     ('PENDING', 'Pending'), 
     ('REFUND', 'Refund'), 
     ('CANCEL', 'Cancel'), 
    ) 
    status = models.CharField(max_length=10, choices=ITEM_STATUS, 
           default="PENDING") 

class Cart(models.Model): 
    user = models.ForeignKey(User) 
    creation_date = models.DateTimeField(auto_now_add=True) 
    modification_date = models.DateTimeField(auto_now=True, auto_now_add=True) 
    is_check_out = models.BooleanField(default=False) 

이있을 수있는 여러 주문을. 각 주문에는 여러 주문 항목이 있습니다. 상태가 '환불'인 모든 OrderItem을 카트에 가져 오려고합니다. 어떻게받을 수 있습니까?

위한 추가적인 정보 : 내 API에 대한 맛있는 파이를 사용하고하는 것은 호출

class RefundItemAuthorization(Authorization): 
    def read_list(self, object_list, bundle): 
     print 'Read List RefundItemAuthorization'   
     if bundle.request.user.is_admin: 
      return object_list.all() 
     else: 
      raise Unauthorized("Only admin user can access this.") 

class OrderItemRefundResource(ModelResource):    
    product = fields.ForeignKey('store.api.ProductResource', 'product', full=True) 

    class Meta: 
     queryset = OrderItem.objects.filter(status='REFUND') 
     resource_name = 'item_refund' 
     include_resource_uri = False 
     allowed_methods = ['get'] 
     limit = 0 
     authentication = SessionAuthentication() 
     authorization = RefundItemAuthorization() 

예 :

{ 
"cart": [ 
    { 
     "id": 1, 
     "orderitem": [ 
      { 
       "id": 22, 
       "product": { 
        "brand_name": "A", 
        "cost_price": "0.69", 
        "description": "XXXX" 
       } 
      }, 
      { 
       "id": 33, 
       "product": { 
        "brand_name": "B", 
        "cost_price": "0.50", 
        "description": "XXXXX" 
       } 
      } 
     ] 
    } 
] 

}

답변

0

하나의 옵션 :

import defaultdict from collections 

d = defaultdict(list) 
for item in OrderItem.objects.filter(status='REFUND'): 
    d[item.order.cart.id].append(item) 
print(d) 
# d is a dict from cart id to a list of OrderItems 

(또는를 사용할 수 있습니다.).

+0

장바구니 정보가 없습니다. 내가 가진 유일한 가치는 status = 'REFUND' – reevh

+0

@reevh입니다. 그러면 나는 당신이 얻고 자하는 것에 조금 혼란스러워합니다. * 모든 *'OrderItem'은'status = 'REFUND''입니까? 또는 * 모든 * 카트로 그룹화 된'OrderItem' 목록의 목록. 명확히 할 예제를 추가하십시오. –

+0

상태가 'REFUND'인 OrderItem 목록을 카트별로 그룹화 한 목록. 질문에 예제가 추가되었습니다. – reevh