2013-03-07 51 views
0

我有一個模型Order我該如何返回一個外鍵綁定到另一個對象的對象?

class Order(SmartModel): 
    SUBMITTED = 1 
    PROCESSED = 2 
    DELIVERED = 3 
    PICKED_UP = 4 
    CANCELLED = 5 
    ORDER_STATUSES = ((SUBMITTED,'Submitted'),(PROCESSED,'Processed'),(DELIVERED,'Delivered'),(PICKED_UP,'picked_up'),(CANCELLED,'Cancelled'), 
    date = models.DateTimeField(auto_now=True,auto_now_add=True) 
    status = models.IntegerField(choices=ORDER_STATUSES, default=SUBMITTED) 
    restaurant = models.ForeignKey(Restaurant,null=True,blank=True,default = None,help_text="The restaurant the customer order from") 
    email = models.EmailField(max_length=50,help_text="Needed as alternative") 
    mobile = PhoneNumberField(max_length=20,default='+25078######',help_text="Needed to communicate and confirm payment from mobile money") 

我創建並保存此對象如下,

def create_order(request,self): 
    orders = Order() 
    checkout_form = forms.CheckoutForm(request.POST,instance=orders) 
    orders = checkout_form.save(commit=False) 
    anon_user = User.objects.get(id=settings.ANONYMOUS_USER_ID) 
    orders.created_by = anon_user 
    orders.modified_by = anon_user 
    orders.status = Order.SUBMITTED 
    orders.save() 
     ...... 

我的管理看起來像這樣,

class OrderCRUDL(SmartCRUDL): 
    model = Order 
    permissions = True 
    actions = ('list','read','create','delete','update') 

    class List(SmartListView): 
     fields = ('date','status','billing_name','mobile','email','billing_address','billing_city','restaurant','restaurant.services') 
     search_fields = ('date',) 

我想在管理員的一個restaurant查看從其應用程序的菜單創建的只有orders的列表。到目前爲止,一家餐廳可以查看應用上所有訂單的列表。

我該如何做到這一點,也歡迎閱讀建議。

這裏是代碼我使用並獲得錯誤TypeError: object of type 'instancemethod' has no len()

def queryset(self,request): 
    queryset = self.Order.objects.get_queryset() 
    current_restaurant = Restaurant.objects.get(id=request.user) 
    return queryset.filter(restaurant = current_restaurant) 

回答

0

試着在你的管理類使用的查詢集過濾器:

def queryset(self, request): 
    qs = self.model._default_manager.get_query_set() 
    current_restaurant = Restaurant.objects.get(id = request.user) #You need to get current restaurant instance 
    return qs.filter(restaurant = current_restaurant) 

您需要使用目前餐廳的登錄數據得到current_restaurant對象。更多的信息可以在清單14中找到documentation by IBM

+0

米的東西得到這個錯誤'類型的對象instancemethod'沒有LEN()結果' – 2013-03-07 10:25:50

+0

你能告訴你的代碼試過嗎? – arulmr 2013-03-07 10:26:56

+0

我剛剛做了,檢查出來 – 2013-03-07 10:40:20

0

我成功地實現通過做這樣

def derive_queryset(self): 
    queryset = super(OrderCRUDL.List, self).derive_queryset() 
    #if super-user,show all comments 
    if self.request.user.is_superuser: 
     return queryset 
    return queryset.filter(restaurant=self.request.user) 
相關問題