我正在尝试为网站(门户)用户添加诸如groupby,排序和搜索选项之类的过滤器,但是这些过滤器无法正常工作。这是我的控制器方法:
@http.route(['/my/tickets', '/my/tickets/page/<int:page>'], type='http', auth="user", website=True)
def portal_my_ticket(self, page=1, date_begin=None, date_end=None, sortby=None, filterby=None, search=None,
search_in='content', **kw):
response = super(CustomerPortal, self)
values = self._prepare_portal_layout_values()
partner = request.env.user.partner_id
support_obj = http.request.env['helpdesk.custom']
domain = []
# count for pager
ticket_count = support_obj.sudo().search_count(domain)
# pager
pager = request.website.pager(
url="/my/tickets",
total=ticket_count,
page=page,
step=self._items_per_page
)
searchbar_sortings = {
'date': {'label': _('Newest'), 'order': 'create_date desc'},
'name': {'label': _('Title'), 'order': 'subject'},
'stage': {'label': _('Stage'), 'order': 'stage_id'},
}
searchbar_filters = {
'all': {'label': _('All'), 'domain': []},
}
searchbar_inputs = {
'content': {'input': 'content', 'label': _('Search <span class="nolabel"> (in Content)</span>')},
'message': {'input': 'message', 'label': _('Search in Messages')},
'customer': {'input': 'customer', 'label': _('Search in Customer')},
'stage': {'input': 'stage', 'label': _('Search in Stages')},
'all': {'input': 'all', 'label': _('Search in All')},
}
# default sort by value
if not sortby:
sortby = 'date'
order = searchbar_sortings[sortby]['order']
# default filter by value
if not filterby:
filterby = 'all'
domain += searchbar_filters[filterby]['domain']
# archive groups - Default Group By 'create_date'
if date_begin and date_end:
domain += [('create_date', '>', date_begin), ('create_date', '<=', date_end)]
# search
if search and search_in:
search_domain = []
if search_in in ('content', 'all'):
search_domain = OR([search_domain, ['|', ('name', 'ilike', search), ('description', 'ilike', search)]])
if search_in in ('customer', 'all'):
search_domain = OR([search_domain, [('partner_id', 'ilike', search)]])
if search_in in ('message', 'all'):
search_domain = OR([search_domain, [('message_ids.body', 'ilike', search)]])
if search_in in ('stage', 'all'):
search_domain = OR([search_domain, [('stage_id', 'ilike', search)]])
domain += search_domain
if request.session.uid and request.env['res.users'].browse(request.session.uid).user_has_groups(
'base.group_portal'):
# content according to pager and archive selected
tickets = support_obj.sudo().search([('partner_id', '=', partner.id)])
else:
tickets = support_obj.sudo().search([])
print("tickets",tickets)
values.update({
'tickets': tickets.sudo(),
'page_name': 'ticket_page',
'pager': pager,
'default_url': '/my/tickets',
'searchbar_sortings': searchbar_sortings,
'searchbar_inputs': searchbar_inputs,
'search_in': search_in,
'sortby': sortby,
'searchbar_filters': OrderedDict(sorted(searchbar_filters.items())),
'filterby': filterby,
})
return request.render("website_helpdesk_support_ticket.display_tickets", values)
此方法使我可以进行排序,搜索等工作,但可能是代码中缺少的方法。这是以下问题的屏幕截图:
在屏幕截图中,我想按升序按阶段对记录进行排序,但默认情况下,创建日期按降序排列。