提问人:ViaTech 提问时间:11/10/2023 最后编辑:ViaTech 更新时间:11/11/2023 访问量:45
Django 问题使用 POST 数据更改基于类的视图中的get_queryset
Django issue altering get_queryset in Class Based View with POST data
问:
不太确定我是怎么弄清楚的,但我正在尝试 POST 表单来更改其内容,但它没有保留过滤后的项目,它在表单期间多次调用,并且在调用时也丢失了 POST 过滤。我一定做错了什么,因为这应该很容易。我似乎只能用变量更改查询集,我如何将其移植到帖子中,有人可以帮我指出某个地方吗?get_queryset()
get_queryset
POST
GET
GET
我现在正在使用变量来更改过滤(这对于我之前为缩短字符串所做的编辑有些好),但我需要使用以提高效率,因为我的表单在多项选择字段中发布了 400 多个项目,因此 URL 变得非常长并且有可能导致浏览器故障,并导致 HTTP 414 错误由于数据 URL 太长。GET
POST
这是我尝试使用 POST
过滤的示例
class GeneralLedgerDatatableView(DatatableView):
model = GeneralLedger
datatable_class = GeneralLedgerDatatable
template_name = 'accounting/general_ledger/general_ledger_list.html'
def post(self, request, *args, **kwargs):
self.object_list = self.get_queryset()
context = self.get_context_data()
return self.render_to_response(context)
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
title = 'General Ledger: Transaction Detail'
context['title'] = title
properties = Property.objects.filter(active=True).order_by('name')
accounts = GLAccount.objects.all().order_by('sortable_account_identifier')
current_property = self.request.session.get('property')
if current_property:
current_property = current_property.pk
form = SelectFilterOptionsForm(self.request.POST or None, properties=properties, accounts=accounts, initial={
'from_date': timezone.now().replace(day=1, month=1).strftime('%m/%d%/%Y'),
'accounts': [x.pk for x in accounts],
'to_date': timezone.now().strftime('%m/%d%/%Y'),
'property': current_property
})
context['form'] = form
return context
def get_queryset(self):
queryset = super().get_queryset()
if self.request.POST:
# THIS IS CALLED BUT SO IS GET AND ALL ARE RETURNED?
property = self.request.POST.get('property')
accounts = [x for x in self.request.POST.getlist('accounts') if x]
from_date = self.request.POST.get('from_date')
to_date = self.request.POST.get('to_date')
q_items = list()
if property:
# filter_dict['journal_line_item__property__pk__in'] = properties
q_items.append(Q(
property=property,
))
q_items.append(Q(
account__pk__in=accounts,
))
q_items.append(
Q(
date_entered__date__gte=datetime.datetime.strptime(from_date, '%m/%d/%Y'),
date_entered__date__lte=datetime.datetime.strptime(to_date, '%m/%d/%Y'),
)
)
queryset = queryset.select_related(
'transaction_code',
'book',
'account',
'property'
).filter(*q_items)
return queryset
答: 暂无答案
评论