Hi,
(sorry for ma y poor english)
i create my first aplication with Django DRF. it's works \o/ ;)
but now i want filter my datatable. DRF it's very good, but for me it's a little obcur.
url of my application is : localhost:8000/paticuliers
/Millau i dont understand how i can filter with argugument in red in my url
in my url.py
from django.conf.urls import include, url
from django.contrib import admin
#from django.urls import path
from rest_framework.routers import DefaultRouter
from distrisac.views import ParticulierViewSet, EntrepriseViewSet, index, app_particuliers, app_entreprises
router = DefaultRouter()
router.register(r'particuliers', ParticulierViewSet)
router.register(r'entreprises', EntrepriseViewSet)
urlpatterns = [
url(r'^index/', index),
#url(r'^particuliers/', app_particuliers),
url(r'^particuliers/(?P<ville>.+)/$', app_particuliers),
url(r'^entreprises/', app_entreprises),
url('admin/', admin.site.urls),
url(r'^api/', include(router.urls)),
]
my models.py
..
from __future__ import unicode_literals
from django.db import models
from django.db.models import Q
from model_utils import Choice
...
...
class particuliers(models.Model):
pk_particulier = models.AutoField(primary_key=True)
foyer = models.CharField(max_length=255,null=True)
numero_immeuble = models.CharField(max_length=10,null=True)
indice_repetition_numero_immeuble = models.CharField(max_length=10,null=True)
libelle_voie = models.TextField(null=True)
code_postal = models.CharField(max_length=10,null=True)
ville = models.CharField(max_length=50,null=True)
...
class Meta:
db_table = "distrisac_particuliers"
def query_particuliers_by_args(**kwargs):
draw = int(kwargs.get('draw', None)[0])
length = int(kwargs.get('length', None)[0])
start = int(kwargs.get('start', None)[0])
search_value = kwargs.get('search[value]', None)[0]
order_column = kwargs.get('order[0][column]', None)[0]
order = kwargs.get('order[0][dir]', None)[0]
order_column = ORDER_COLUMN_CHOICES[order_column]
# django orm '-' -> desc
if order == 'desc':
order_column = '-' + order_column
queryset = particuliers.objects.all()
total = queryset.count()
if search_value:
queryset = queryset.filter(Q(pk_particulier__icontains=search_value) |
Q(foyer__icontains=search_value) |
Q(libelle_voie__icontains=search_value))
count = queryset.count()
queryset = queryset.order_by(order_column)[start:start + length]
return {
'items': queryset,
'count': count,
'total': total,
'draw': draw
}
and in my view.py
from django.shortcuts import render
from distrisac.models import particuliers
from distrisac.serializers import ParticuliersSerializer
...
...
# Create your views here.
from rest_framework import viewsets, status
from rest_framework.response import Response
from rest_framework import generics
from django.template.response import TemplateResponse
from django.http.response import HttpResponse
from distrisac.models import query_particuliers_by_args
from django.views.generic import TemplateView
from django_datatables_view.base_datatable_view import BaseDatatableView
def index(request):
html = TemplateResponse(request, 'index.html')
return HttpResponse(html.render())
def app_particuliers(request,**kwargs):
html = TemplateResponse(request, 'particuliers.html')
return HttpResponse(html.render())
...
...
# Create your views here.
class ParticulierViewSet(generics.ListCreateAPIView):#viewsets.ModelViewSet):
queryset = particuliers.objects.all()
filter_fields = ('ville',)
serializer_class = ParticuliersSerializer
def get_queryset(self):
return self.queryset.filter(ville=self.kwargs.get('ville'))
def list(self, request, **kwargs):
try:
distrisac = query_particuliers_by_args(**request.query_params)
serializer = ParticuliersSerializer(distrisac['items'], many=True)
result = dict()
result['data'] = serializer.data
result['draw'] = distrisac['draw']
result['recordsTotal'] = distrisac['total']
result['recordsFiltered'] = distrisac['count']
return Response(result, status=status.HTTP_200_OK, template_name=None, content_type=None)
except Exception as e:
return Response(e, status=status.HTTP_404_NOT_FOUND, template_name=None, content_type=None)
in my console i have this error :
typeError : as_view() takes 1 positionnal argument but 2 were given
someone ca me help please ?
Thanks a lot
Christophe