2017-02-20 62 views
1

当Django的外壳(python manage.py shell)执行以下查询集:查询集的外壳,但不是在Views.py工作 - Django的1.10

Employee.objects.filter(restaurant__pk = 1) 

我得到一个结果回:

<QuerySet [<Employee: Joyce McDonnals>]> 

请对不起,因为我是Django的新手。我想通过PK在我的网页中动态实现这个查询集。这是我在views.py定义了get_queryset是:

class EmployeeList(ListView): 
    template_name= "Restaurants/employee_list.html" 
    model = Employee 
def get_queryset(self, **kwargs): 
     queryset = Employee.objects.filter(pk= restaurant.pk) 
     return queryset 

但这返回错误:

NameError at /restaurant/1/employees/ 
name 'restaurant' is not defined 
Request Method: GET 
Request URL: http://127.0.0.1:8001/restaurant/1/employees/ 
Django Version: 1.10.5 
Exception Type: NameError 
Exception Value:  
name 'restaurant' is not defined 

我已经尝试了一些变种在我的views.py的查询集,但我可以似乎没有得到它的工作。有人可以帮我定义这个查询集吗?

+0

的问题是不是查询集,但标准的Python作用域。 “餐厅”的价值应该来自哪里? –

+0

'restaurant'已在我的Employee模型中定义为模型'RestaurantFeature'的外键,如下所示:'restaurant = models.ForeignKey(RestaurantFeature,on_delete = models.CASCADE)' –

+0

但这并不能回答问题; \你想过滤的*特定*值来自哪里? –

回答

2

问题不在于queryset,而在于标准的Python范围。你需要考虑餐厅的价值应该来自哪里。

就你而言,它显然来自URL;假设你有一个网址是这样的:

url(r'^restaurant/(?P<restaurant_id>\d+)/employees/$', ...) 

命名捕获组,该值将被存储在self.kwargs['restaurant_id']。所以你应该在过滤器中使用它。

还要注意的是,你可以直接使用restaurant_id的领域,而不是做一个JOIN

所以:

queryset = Employee.objects.filter(restaurant_id=self.kwargs['restaurant']) 
+0

感谢您的详细解答。餐厅的价值确实来自URL。对不起,没有添加这个。我的URL正则表达式是:'url(r'^ restaurant /(?P \ d +)/ employees/$',EmployeeList.as_view(),name ='restaurant_employee')'。我添加了你的代码,但是这会导致错误:'KeyError:'restaurant''。你能解释一下这仍然不能解决我的问题吗? –

+0

哦,我通过再次阅读您的答案来解决问题。我把餐厅改成了'pk'!非常感谢你! –

0

您没有将餐厅提供给get_queryset。也许这应该是这样的:

def get_queryset(self): 
     self.restaurant = get_object_or_404(Restaurant, name=self.args[0]) 
     return Emploee.objects.filter(pk=self.restaurant) 
0

试试这个 -

queryset = Employee.objects.filter(restaurant__pk=pk_value) 

你应该pk_value路过这里和餐厅字段应该是外键的另一个表。您可以通过像在shell中一样传递pk_value = 1来进行检查。

希望这有助于。欲了解更多信息,请查看django模型文档 - https://docs.djangoproject.com/en/1.10/topics/db/models/