簡體   English   中英

Django模型ForeignKey關系

[英]Django Model ForeignKey Relationship

我有以下型號:

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)

同一個購物車可以有多個訂單 每個訂單將有多個訂單項。 我想在同一購物車中獲取所有狀態為'Refund'的OrderItems。 我該怎么辦?

附加信息:我正在為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"
                }
            }
        ]
    }
]

}

一種選擇:

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

(或者,如果您精通可迭代對象,則可以使用itertools.groupby 。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM