2013-04-10 111 views
0

我有兩個型號,Recieved_orderorder爲什麼get getqueryset()沒有返回正確的結果?

class Order(SmartModel): 

    restaurant = models.ForeignKey(Restaurant,null=True,blank=True,default = None,help_text="The restaurant the customer order from") 
    #contact info 
    email = models.EmailField(max_length=50,help_text="Needed as alternative") 
    mobile = PhoneNumberField(max_length=20,default='+25078######') 

class Recieved_Order(SmartModel): 
    item = models.ForeignKey(Item) 
    date_added = models.DateTimeField(auto_now=True,auto_now_add=True) 
    quantity = models.IntegerField(default=0) 
    price = models.DecimalField(max_digits=9,decimal_places=2) 
    order = models.ForeignKey(Order) 

我希望有一個餐廳經理(用戶),以能夠接收到他的具體的餐廳作出的命令(Recieved_order)登錄時,要做到這一點,我在views.py

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

    class List(SmartListView): 
     fields = ('order_email','order_mobile','order_billing_city','item.name','item.price','quantity','order_id','order_restaurant') 
     search_fields = ('date_added',) 

     def get_queryset(self,*args,**kwargs): 
      queryset = super(Recieved_OrderCRUDL.List, self).get_queryset(*args,**kwargs) 
      if self.request.user.is_superuser: 
       return queryset 
      return queryset.filter(order=self.request.user) 

與上面,我是在兩個不同的餐廳,餐廳和它不工作了,因爲它應該測試以下。它返回給定餐館的錯誤訂單。

我在做什麼不對get_queryset()

+0

你確定self.request提供了一個有效的請求對象嗎? – karthikr 2013-04-10 20:42:30

+0

是的,它確實.. – 2013-04-10 20:43:51

回答

1

如果你想有一個用戶(你是指作爲一個經理)只能查看自己的訂單,你需要改變的東西... Restaurant將需要有一個指向User場(讓我們稱之爲user並假定它是一個ForeignKey)然後,你可以這樣做

if self.request.user.is_superuser: 
    return queryset 
return queryset.filter(order__restaurant__user=self.request.user) 

正如指出的@Joe霍洛韋,你不應該試圖在order場過濾與user對象...

我想要的其他奇怪的事情要指出的是

fields = ('order_email','order_mobile','order_billing_city','item.name','item.price','quantity','order_id','order_restaurant') 

你似乎是使用的方式混合試圖訪問的東西... 您應該使用__(這是2個下劃線)來訪問的關係,而不是_.

+0

嘿,謝謝你。我已經清理過了。 – 2013-04-11 07:18:24

2

有一些混亂回事:

return queryset.filter(order=self.request.user) 

你告訴它來構建過濾器對User對象Order對象的查詢。

您的示例代碼中是否缺少將命令與用戶聯繫起來以便可以構建正確的聯接?

+0

我有一個get_queryset()函數爲'訂單'模型,結束就像'返回queryset.filter(餐廳= self.request.user)' – 2013-04-10 21:56:22

+0

你是對的,我錯過了什麼, @ngenator在他的回答中指出了這一點......謝謝 – 2013-04-11 07:21:17

相關問題