为什么get getqueryset()没有返回正确的结果?
我有两个型号,Recieved_order
和order
,为什么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()
。
如果你想有一个用户(你是指作为一个经理)只能查看自己的订单,你需要改变的东西... 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个下划线)来访问的关系,而不是_
或.
嘿,谢谢你。我已经清理过了。 – 2013-04-11 07:18:24
有一些混乱回事:
return queryset.filter(order=self.request.user)
你告诉它来构建过滤器对User
对象Order
对象的查询。
您的示例代码中是否缺少将命令与用户联系起来以便可以构建正确的联接?
我有一个get_queryset()函数为'订单'模型,结束就像'返回queryset.filter(餐厅= self.request.user)' – 2013-04-10 21:56:22
你是对的,我错过了什么, @ngenator在他的回答中指出了这一点......谢谢 – 2013-04-11 07:21:17
你确定self.request提供了一个有效的请求对象吗? – karthikr 2013-04-10 20:42:30
是的,它确实.. – 2013-04-10 20:43:51