Commit 7c541496 authored by Staś Kycia's avatar Staś Kycia
Browse files

minior voting fix and voter api endpoint

parent c237a549
Loading
Loading
Loading
Loading
+7 −0
Changes for api/serializers.py: 7 added lines, 0 removed lines.
Original line number Diff line number Diff line
from rest_framework import serializers
from elections.models import Election, Option
from voters.models import Voter

class ElectionListSerializer(serializers.ModelSerializer):
    class Meta:
@@ -17,3 +18,9 @@ class ElectionSerializer(serializers.ModelSerializer):
    class Meta:
        model = Election
        fields = ['id', 'alias', 'name', 'description', 'allow_invalid', 'options']

class VoterSerializer(serializers.ModelSerializer):
    group_name = serializers.ReadOnlyField(source="group.display_name")
    class Meta:
        model = Voter
        fields = ['name', 'group_name']
 No newline at end of file
+2 −1
Changes for api/urls.py: 2 added lines, 1 removed line.
Original line number Diff line number Diff line
from django.urls import path
from api.views import ElectionListView, ElectionView
from api.views import ElectionListView, ElectionView, VoterView

urlpatterns = [
    path("elections/", ElectionListView.as_view(), name="election-list-api"),
    path("election/<str:alias>/", ElectionView.as_view(), name="election-api"),
    path("voter/<uuid:token>/", VoterView.as_view(), name="voter-api")
]
 No newline at end of file
+13 −2
Changes for api/views.py: 13 added lines, 2 removed lines.
Original line number Diff line number Diff line
@@ -7,7 +7,7 @@ from elections.models import Election
from voters.models import Voter
from vote.models import Participation

from api.serializers import ElectionListSerializer, ElectionSerializer
from api.serializers import ElectionListSerializer, ElectionSerializer, VoterSerializer

class ElectionListView(ListAPIView):
    serializer_class = ElectionListSerializer
@@ -37,7 +37,6 @@ class ElectionView(RetrieveAPIView):
    
    lookup_field = "alias"
    
    
    def get_object(self):        
        token = self.request.query_params.get("token")
        if token is None:
@@ -59,3 +58,15 @@ class ElectionView(RetrieveAPIView):
            raise ValidationError("Już oddałeś głos w tym głosowaniu!")
        
        return election
    
class VoterView(RetrieveAPIView):
    serializer_class = VoterSerializer
    
    queryset = Voter.objects.all()
    
    lookup_field = "token"
    
    def get_object(self):                
        voter = super().get_object()
        
        return voter
 No newline at end of file
+2 −2
Changes for vote/forms.py: 2 added lines, 2 removed lines.
Original line number Diff line number Diff line
@@ -13,7 +13,7 @@ class VoteForm(forms.Form):
        super().__init__(*args, **kwargs)
        
        if self.election:
            choices = [(o.id, str(o)) for o in self.election.option_set.all()]
            choices = [(o.id, str(o)) for o in self.election.options.all()]
            
            if self.election.allow_invalid:
                choices.append(('invalid', 'GŁOS NIEWAŻNY'))
@@ -28,7 +28,7 @@ class VoteForm(forms.Form):
                raise ValidationError("W tym głosowaniu nie możesz oddać głosu nieważnego")
            return data
        
        if not self.election.option_set.filter(id=data).exists():
        if not self.election.options.filter(id=data).exists():
            raise ValidationError("Opcja niedostępna")
        
        return data
 No newline at end of file