我想在基于Django类的ListView中使用Ajax变量。
使用request.GET.get
将变量放入视图中没问题,但是这样做似乎使我陷入了困境。
如果我正在使用def get(self, request)
,则在使用get_queryset
和get_context
时会遇到问题
如果我跳过使用def get(self, request)
,则在将Ajax变量放入视图时会遇到问题。
我想寻求帮助以使其正常运行。最终目的是产生经过过滤的context
,该清单将用于产生电子邮件。
class ProductListSendView(LoginRequiredMixin, ListView):
model = Product
template = 'product/product_email.html'
def get(self, request):
_req_list = json.loads(request.GET.get('ids', None))
_res = [int(i) for i in _req_list]
return _res
def get_queryset(self, _res):
queryset = super(ProductListSendView, self).get_queryset()
qs = queryset.filter(id__in=_res)
return qs
def get_context_data(self):
context = super(ProductListSendView, self).get_context_data()
context['page_title'] = 'Authors'
self.send_email(context)
return context
js函数(出于完整性考虑)
var getProducts = function () {
var table = $('#product_list-table').DataTable();
var ids = $.map(table.rows('.selected').data(), function (item) {
return item[1]});
jQuery.ajax({
type: 'GET',
url: "/product/list/send/",
data: {
ids: JSON.stringify(ids),
},
success: function(data) {},
error: function(xhr, textStatus, error) {
console.log(error);
}
});
};
答案 0 :(得分:1)
您可以覆盖get_queryset
并使用self.request
从那里访问请求:
def get_queryset(self):
_req_list = json.loads(self.request.GET.get('ids', None))
_ids = [int(i) for i in _req_list]
queryset = super(ProductListSendView, self).get_queryset()
qs = queryset.filter(id__in=_ids)
return qs
如果您不仅需要从_ids
访问get_queryset
,还需要从get_context_data
访问self
,则可以通过get
方法将其存储在super
上,然后调用 def get(self, request):
_req_list = json.loads(request.GET.get('ids', None))
self._ids = [int(i) for i in _req_list]
return super().get(request)
进行常规处理:
get_queryset
当然,如果要这样做,则应在get_context_data
和self._ids
中通过while
进行访问