Skip to content

Instantly share code, notes, and snippets.

View akshar-raaj's full-sized avatar
💭
Learning something new everyday!

Akshar Raaj akshar-raaj

💭
Learning something new everyday!
View GitHub Profile
@akshar-raaj
akshar-raaj / gist:794633d5a51916e63a3ecc02d0bd2dd6
Created May 7, 2019 10:53
Question with Choice Serializer dictionary
# polls/models.py
class Question(models.Model):
....
def choices(self):
if not hasattr(self, '_choices'):
self._choices = self.choice_set.all()
return self._choices
# polls/serializers.py
class ChoiceSerializer(serializers.ModelSerializer):
@akshar-raaj
akshar-raaj / question_serializer.py
Created May 7, 2019 10:54
QuestionSerializer using ChoiceSerializer
class QuestionSerializer(serializers.ModelSerializer):
choices = ChoiceSerializer(read_only=True, many=True)
class Meta:
model = Question
fields = '__all__'
class QuestionListPageSerializer(serializers.ModelSerializer):
was_published_recently = serializers.BooleanField(read_only=True)
class Meta:
model = Question
fields = '__all__'
class QuestionDetailPageSerializer(QuestionListPageSerializer):
@api_view(['GET', 'POST'])
def questions_view(request):
if request.method == 'GET':
questions = Question.objects.all()
serializer = QuestionListPageSerializer(questions, many=True)
return Response(serializer.data)
elif request.method == 'POST':
serializer = QuestionSerializer(data=request.data)
if serializer.is_valid():
question = serializer.save()
class VoteSerializer(serializers.Serializer):
choice_id = serializers.IntegerField()
path('questions/<int:question_id>/vote/', apiviews.vote_view, name='vote_view'),
@api_view(['PATCH'])
def vote_view(request, question_id):
question = get_object_or_404(Question, pk=question_id)
serializer = VoteSerializer(data=request.data)
if serializer.is_valid():
choice = get_object_or_404(Choice, pk=serializer.validated_data['choice_id'], question=question)
choice.votes += 1
choice.save()
return Response("Voted")
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
@akshar-raaj
akshar-raaj / gist:d04e058aa8f35da9660d1cfe76c643ff
Created May 7, 2019 11:10
ChoiceSerializerWithVotes and QuestionResultPageSerializer
class ChoiceSerializerWithVotes(ChoiceSerializer):
class Meta(ChoiceSerializer.Meta):
fields = ChoiceSerializer.Meta.fields + ('votes',)
class QuestionResultPageSerializer(QuestionListPageSerializer):
choices = ChoiceSerializerWithVotes(many=True, read_only=True)
@api_view(['GET'])
def question_result_view(request, question_id):
question = get_object_or_404(Question, pk=question_id)
serializer = QuestionResultPageSerializer(question)
return Response(serializer.data)
path('questions/<int:question_id>/result/', apiviews.question_result_view, name='question_result_view')