【发布时间】:2019-01-21 11:16:19
【问题描述】:
使用 Django 基于类的视图,我已经为 Order 对象创建了一个 ListView,并且我创建了一个 FormView 来对这些排序者执行高级搜索。
但是,我不确定如何将过滤后的 FormView 查询集传递给 ListView。
这里是代码,带有注释部分来解释问题:
class OrdersListView(PermissionRequiredCanHandleOrders,
SelectRelatedMixin, PrefetchRelatedMixin,
ModelInContextMixin, SubSectionLastOrders,
RestaurantOrdersOnly,
ListView):
model = Order
paginator_class = DiggPaginator
paginate_by = 15
select_related = ('convive__user',)
prefetch_related = ('orderoperation_set',)
# will use the template named order_list.html
class OrdersAdvancedSearchView(PermissionRequiredCanHandleOrders,
ModelInContextMixin, SubSectionLastOrders,
RestaurantOrdersOnly, RestaurantMixin,
FormView):
model = Order
template_name = "orders/order_advanced_search.html"
form_class = OrderAdvancedSearchForm
def form_valid(self, form):
data = form.cleaned_data
queryset = Order.objects.all()
# Here, I'm using the form content to filter the queryset
# queryset = queryset.filter(some_attribute__in=data['stuff'])
# MY PAIN POINT IS HERE: what I'm supposed to do here ?
# my queryset is filtered, and I need to call OrderListView
# with it.
return super().form_valid(form)
【问题讨论】:
-
使用
class class_name(View):并在其中定义def get(self, request):和def post(self, request);方法。这是在from django.views import View中定义的,请看这里:docs.djangoproject.com/en/2.1/topics/class-based-views/intro/… -
@Ahtisham 请问我提供的案例中有一些示例代码吗?请注意,我想保持
OrdersListView原样。我更改了问题的标题以更明确地说明我的问题。 -
如果你想要的只是过滤
ListView这听起来像,那么就不需要 POST 表单(POST 通常是修改数据库中的数据)。为什么您的 HTML 页面无法使用搜索参数获取与 URL 中的查询参数相同的 ListView?这样你只需要在你的ListView的get_queryset()方法中处理GET 参数。
标签: python django django-class-based-views