Ich habe eine Tabelle, in der ich Informationen über Organisationen anzeigen und ich habe einen Mechanismus, der nächste Aktion Datum auf der Organisation auslöst, die manuell auf den Organisationen festgelegt ist. Jetzt habe ich ein benutzerdefiniertes Feld datepicker
oben auf meiner Tabelle hinzugefügt, so dass ich es für das gewünschte Datum filtern und alle next action date
für diese Organisation am ausgewählten Datum anzeigen kann, so übergebe ich einen Wert an Controller
, damit ich in der restAPI
, und in der rest
möchte ich Filter das Datum zu sein vor oder gleich jetzt, so dass ich Organisationen bis zum nächsten Aktion Datum zeigen kann. Meine Frage ist, wie man das Datum filtert, um vor oder gleich jetzt zu sein, verlor ich wirklich hier, also kann mir jemand helfen und erklären, wie ich das in meinem ModelViewSet
tun kann.benutzerdefinierte Filter auf Kontakt nach Datum - Django Rest Framework
ModelViewSet:
from rest_framework import viewsets, permissions, filters
from cms.restapi.pagination import StandardResultsOffsetPagination
from cms_sales.models import LeadContact
from cms_sales.restapi.permissions.lead_contact_permissions import LeadContactPermissions
from cms_sales.restapi.serializers.lead_contact_serializer import LeadContactSerializer
class LeadContactViewSet(viewsets.ModelViewSet):
def get_queryset(self):
queryset = LeadContact.objects.none()
user = self.request.user
if user.has_perm('vinclucms_sales.can_view_full_lead_contact_list'):
queryset = LeadContact.objects.all()
elif user.has_perm('vinclucms_sales.can_view_lead_contact'):
queryset = LeadContact.objects.filter(account_handler=user)
return queryset
serializer_class = LeadContactSerializer
filter_backends = (filters.DjangoFilterBackend, filters.SearchFilter, filters.OrderingFilter)
filter_fields = ('account_handler',)
ordering_fields = (
'first_name', 'last_name', 'account_handler__first_name', 'account_handler__last_name',
'sub_organization_name', 'organization_name', 'next_action_date', 'serial_number',
'next_action_date', 'status_text', 'select_date')
search_fields = (
'first_name', 'last_name', 'account_handler__first_name', 'account_handler__last_name',
'sub_organization_name', 'organization_name', 'next_action_date', 'serial_number',
'next_action_date', 'status_text', 'select_date')
pagination_class = StandardResultsOffsetPagination
permission_classes = [permissions.IsAuthenticated, LeadContactPermissions]
Cotroller, wo ich das datepicker
Feld passieren:
app = angular.module 'cms.sales'
app.controller 'LeadContactListCtrl', ['$scope', '$rootScope', '$compile', 'LeadContacts'
($scope, $rootScope, $compile, LeadContacts) ->
savedSuccessMessage = "Lead Contact List was updated"
savedFailMessage = "Failed to update lead contact list"
$scope.init =()->
fetchLeadContacts()
fetchLeadContacts =() ->
$('#expensesListTable').DataTable(
createdRow: (row, data, index) ->
$compile(row)($scope)
sDom: 'lfrtip'
processing: true
serverSide: true
searchDelay: 1000
orderMulti: false
pageLength: 25
ajax:
url: '/api/sales/lead_contact/'
data: (data) ->
data.limit = data.length
data.offset = data.start
data.search = data.search['value']
if data.order[0]['dir'] == 'asc'
data.ordering = data.columns[data.order[0]['column']].name
else
data.ordering = '-' + data.columns[data.order[0]['column']].name
return 0
dataFilter: (data) ->
json = jQuery.parseJSON(data)
json.recordsTotal = json.count
json.recordsFiltered = json.count
json.data = json.results
return JSON.stringify json
columns: [
{
data: 'serial_number'
name: 'serial_number'
render: (data, type, row, meta) ->
return '<a href="{{ site.domain }}' + row.absolute_url + '">' + data + '</a>'
}
{
name: 'first_name,last_name'
render: (data, type, row, meta)->
return row['first_name'] + ' ' + row['last_name']
}
{
data: 'organization_name'
name: 'organization_name'
}
{
data: 'sub_organization_name'
name: 'sub_organization_name'
}
{
data: 'account_handler'
name: 'account_handler__first_name, account_handler__last_name'
render: (data, type, row, meta)->
return data['first_name'] + ' ' + data['last_name']
}
{
data: 'status_text'
name: 'status_text'
render: (data, type, row, meta)->
return "<span class='" + row['status_display_class'] + "'>" + data + "</span>"
}
{
data: "next_action_date"
name: "next_action_date"
render: (data, type, row, meta)->
initValue = data
if data
initValue = "'" + data + "'"
return '<div class="input-control text" data-role="datepicker"
ng-controller="ContactDateCtrl"
ng-init="init(' + row['pk'] + ', ' + initValue + ')"
data-format="mmmm d, yyyy">
<input type="text" ng-model="contactDate" ng-change="onChange()">
<button class="button"><span class="mif-calendar"></span></button>
</div>'
}
])
$scope.SelectLeadContacts =() ->
params = {}
if $scope.lead_contact.id
params['id'] = $scope.lead_contact.id
LeadContacts.update(params).$promise.then saveSuccessCallback, saveFailedCallback
else
LeadContacts.save(params).$promise.then saveSuccessCallback, saveFailedCallback
saveSuccessCallback = (response) ->
ClientNotifications.showNotification("Success", savedSuccessMessage, "success")
saveFailedCallback = (error) ->
ClientNotifications.showNotification("Alert", savedFailMessage, "alert")
$scope.showAddNew =()->
initNewLeadContacts()
initNewLeadContacts =()->
$scope.lead_contact = {}
$scope.lead_contact.select_date = 'Jan 1, 2200'
]
Vorlage:
{% extends "site_base.html" %}
{% load i18n static %}
{% block head_title %}Lead contact list{% endblock %}
{% block ng_app %}cms.sales{% endblock %}
{% block body %}
<div class="grid">
<div class="row">
<h2 class="align-center">
<strong>
{% trans "Contact leads List" %}
</strong>
</h2>
</div>
</div>
<div class="flex-grid"
ng-controller="LeadContactListCtrl"
ng-init="init()">
<div class="row">
<div class="cell size-p20 padding10">
<label for="id_select_date">Select Date: *</label>
<div class="full-size">
<div class="input-control full-size text"
data-role="datepicker" date-format="mmmm d, yyyy">
<input id="id_select_date" ng-model="lead_contact.select_date"/>
<button class="button"><span class="mif-calendar"></span></button>
</div>
</div>
</div>
</div>
<div class="row">
<div class="cell size-p20 padding10">
<button class="button primary" ng-click="SelectLeadContacts()">
{% trans "Submit" %}
</button>
</div>
</div>
<div class="row">
<div class="cell size-p100 padding10">
<table title="Contact leads List" class="dataTable" id="contactLeadsList">
<thead>
<tr>
<th>{% trans 'Serial Number' %}</th>
<th>{% trans 'Lead name' %}</th>
<th>{% trans 'Organization' %}</th>
<th>{% trans 'Sub-organization' %}</th>
<th>{% trans 'Handler' %}</th>
<th>{% trans 'Sale status' %}</th>
<th>{% trans 'Next communication date' %}</th>
</tr>
</thead>
</table>
</div>
</div>
</div>
{% endblock %}
Ok, danke, für jetzt, ich habe herausgefunden, dass 'lte' und' gte' mir helfen, dies zu tun, trotzdem werde ich Ihre Antwort akzeptieren, weil es hilfreich ist – PetarP