Enzo Yair

Se agrego filtros a edictoviewset

1 -from rest_framework import viewsets, mixins, status, serializers 1 +from rest_framework import viewsets, filters, mixins, status, serializers
  2 +from django_filters.rest_framework import DjangoFilterBackend
2 from rest_framework.response import Response 3 from rest_framework.response import Response
3 from rest_framework.permissions import IsAuthenticated 4 from rest_framework.permissions import IsAuthenticated
4 from rest_framework.decorators import action 5 from rest_framework.decorators import action
@@ -6,6 +7,7 @@ from datetime import datetime @@ -6,6 +7,7 @@ from datetime import datetime
6 7
7 from .models import Edicto, Precio 8 from .models import Edicto, Precio
8 from .serializer import EdictoSerializer, PrecioSerializer 9 from .serializer import EdictoSerializer, PrecioSerializer
  10 +from .filters import EdictoFilter
9 from .utils import contador 11 from .utils import contador
10 # from .precio import contador 12 # from .precio import contador
11 13
@@ -19,39 +21,17 @@ class EdictoViewSet(mixins.CreateModelMixin, @@ -19,39 +21,17 @@ class EdictoViewSet(mixins.CreateModelMixin,
19 21
20 serializer_class = EdictoSerializer 22 serializer_class = EdictoSerializer
21 permission_classes = [IsAuthenticated, ] 23 permission_classes = [IsAuthenticated, ]
22 -  
23 - def get_queryset(self):  
24 -  
25 - return Edicto.objects.all().order_by('usuario_id')  
26 -  
27 - def list(self, request, *args, **kwargs):  
28 - fields_to_select = [  
29 - 'id',  
30 - 'estado',  
31 - 'cuerpo_edicto',  
32 - 'cantidad_palabras',  
33 - 'dias_publicar',  
34 - 'cantidad_sellos',  
35 - 'cantidad_copias',  
36 - 'archivo',  
37 - 'fecha_creacion',  
38 - 'observaciones',  
39 - 'fecha_publicacion',  
40 - ]  
41 - queryset = self.filter_queryset(self.get_queryset().values(*fields_to_select))  
42 - user_id = request.user.id  
43 - response_data = {  
44 - 'user_id': user_id,  
45 - 'edictos': queryset,  
46 - }  
47 - return Response(response_data) 24 + filter_backends = (DjangoFilterBackend, filters.OrderingFilter)
  25 + filterset_class = EdictoFilter
  26 + queryset = Edicto.objects.all().order_by('id')
  27 + ordering_fields = ('usuario', 'estado', 'fecha_publicacion', 'id',)
48 28
49 def perform_create(self, serializer): 29 def perform_create(self, serializer):
50 edicto = self.request.data.get('cuerpo_edicto') 30 edicto = self.request.data.get('cuerpo_edicto')
51 cantidad_palabras = contador(edicto) 31 cantidad_palabras = contador(edicto)
52 serializer.save(cantidad_palabras=cantidad_palabras, usuario=self.request.user) 32 serializer.save(cantidad_palabras=cantidad_palabras, usuario=self.request.user)
53 33
54 - @action(detail=True, methods=['patch']) 34 + @action(detail=True, methods=['put', 'patch'])
55 def custom_update(self, request): 35 def custom_update(self, request):
56 edicto = request.data.get('cuerpo_edicto') 36 edicto = request.data.get('cuerpo_edicto')
57 cantidad_palabras = contador(edicto) 37 cantidad_palabras = contador(edicto)
@@ -3,6 +3,11 @@ from django_filters import rest_framework as filters @@ -3,6 +3,11 @@ from django_filters import rest_framework as filters
3 from edicto.models import Edicto 3 from edicto.models import Edicto
4 4
5 5
6 -class EdictoFilters(filters.FilterSet):  
7 - models = Edicto  
8 - fields = ('estado', 'fecha_publicacion',) 6 +class EdictoFilter(filters.FilterSet):
  7 + class Meta:
  8 + models = Edicto
  9 + fields = ('usuario', 'estado', 'fecha_publicacion', 'edicto_id',)
  10 +
  11 +
  12 +
  13 +
@@ -12,6 +12,7 @@ class EdictoSerializer(serializers.ModelSerializer): @@ -12,6 +12,7 @@ class EdictoSerializer(serializers.ModelSerializer):
12 class Meta: 12 class Meta:
13 model = Edicto 13 model = Edicto
14 fields = ('edicto_id', 14 fields = ('edicto_id',
  15 + 'usuario',
15 'estado', 16 'estado',
16 'cuerpo_edicto', 17 'cuerpo_edicto',
17 'cantidad_palabras', 18 'cantidad_palabras',
@@ -21,13 +22,14 @@ class EdictoSerializer(serializers.ModelSerializer): @@ -21,13 +22,14 @@ class EdictoSerializer(serializers.ModelSerializer):
21 'archivo', 22 'archivo',
22 'fecha_creacion', 23 'fecha_creacion',
23 'observaciones', 24 'observaciones',
  25 + 'fecha_publicacion',
24 ) 26 )
25 27
26 included_serializers = { 28 included_serializers = {
27 - 'usuario': 'usuario.serializers.UsuarioSerializer', 29 + 'usuario': UsuarioSerializer,
28 } 30 }
29 31
30 - read_only_fields = ('fecha_publicacion', 'cantidad_palabras', 'fecha_creacion') 32 + read_only_fields = ('usuario', 'fecha_publicacion', 'cantidad_palabras', 'fecha_creacion')
31 33
32 def to_representation(self, instance): 34 def to_representation(self, instance):
33 data = super().to_representation(instance) 35 data = super().to_representation(instance)
@@ -44,7 +46,6 @@ class EdictoSerializer(serializers.ModelSerializer): @@ -44,7 +46,6 @@ class EdictoSerializer(serializers.ModelSerializer):
44 return value 46 return value
45 47
46 48
47 -  
48 class PrecioSerializer(serializers.ModelSerializer): 49 class PrecioSerializer(serializers.ModelSerializer):
49 usuario = UsuarioSerializer() 50 usuario = UsuarioSerializer()
50 51