gpt4 book ai didi

python - 包含表单的 Django ListView

转载 作者:太空宇宙 更新时间:2023-11-03 21:07:18 24 4
gpt4 key购买 nike

最近我在 Django 中从基于方法的 View 转向基于类的 View 。

我觉得我找不到一个很好的解决方案来将ListView与表单一起使用。

以下代码在新 View 中有效,但分页不起作用。

我哪里做错了?另外,您认为新的观点是什么?还有另一种更干净的方法吗?

基于旧方法的 View :

def list_orders(request):
if request.method == 'POST':
form = billing_forms.OrdersForm(request.POST)
object_list = orders.list_orders_by_date(
owner=request.user,
year=form.data.get('year'),
month=form.data.get('month')
)
else:
form = billing_forms.OrdersForm()
object_list = billing_orders.list_orders(owner=request.user)

page = request.GET.get('page', 1)
paginator = Paginator(objects_list, 10)
try:
object_list = paginator.page(page)
except PageNotAnInteger:
object_list = paginator.page(1)
except EmptyPage:
object_list = paginator.page(paginator.num_pages)

return shortcuts.render(request, 'billing/orders.html', {
'object_list': object_list,
'form': form,
})

基于新类的 View :

class OrdersListView(ListView, BaseLoginRequiredMixin):
template_name = 'billing/orders.html'
paginate_by = 10

def get(self, request, *args, **kwargs):
form = billing_forms.OrdersForm()
object_list = billing_orders.list_orders(owner=request.user)
return shortcuts.render(request, self.template_name, {'form': form, 'object_list': object_list})

def post(self, request, *args, **kwargs):
form = billing_forms.OrdersForm(request.POST)
object_list = billing_orders.list_orders_by_date(
owner=request.user,
year=form.data.get('year'),
month=form.data.get('month'),
)
return shortcuts.render(request, self.template_name, {'form': form, 'object_list': object_list})

最佳答案

ListView 为您处理分页。在您的情况下,它不会,因为您正在重写 get 方法。您可以使用get_queryset方法来提供查询集,无需重写整个get方法:

class OrdersListView(ListView, BaseLoginRequiredMixin):
template_name = 'billing/orders.html'
paginate_by = 10
form_class = billing_forms.OrdersForm
model = Order

def get_queryset(self):
return billing_orders.list_orders(owner=self.request.user)

关于python - 包含表单的 Django ListView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55317310/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com