[Django] 투표 결과 도출

채린·2023년 9월 1일

투표 결과를 도출하자. 나이대별로 투표 항목별 표 개수를 반환하는 것이 목표이다.
투표는 Vote모델이며 투표항목은 3개로 고정되어 있다.
한 사용자가 투표를 하면 VotePer모델의 객체가 생성된다. VotePer모델은 다음과 같다.

class VotePer(models.Model):
    voteper_id=models.AutoField(primary_key=True)
    age=models.IntegerField()								# 1,2,3,4,5
    select=models.IntegerField()							# 1,2,3
    voteper_vote=models.ForeignKey(Vote, related_name='voteper_vote',on_delete=models.CASCADE)
    voteper_user=models.ForeignKey(User, related_name='voteper_user',on_delete=models.CASCADE)

serializers.py

class DoneVotePostSerializer(serializers.ModelSerializer):
    vote_user=UserProfileSerializer()
    result=serializers.SerializerMethodField()
    class Meta:
        model = Vote
        fields=['vote_id','title','item1', 'item2', 'item3', 'start_date','done_date','vote_user','result']
    def get_result(self, instance):
        result = {}  # 결과를 저장할 딕셔너리
        for age, _ in VotePer.AGES:
            for select, _ in VotePer.SELECTS:
                result[f"result{select}_{age}"] = VotePer.objects.filter(voteper_vote=instance, age=age, select=select).count()
        return result

결과:

"DoneVote": [ 
	{
	"vote_id": 21,
	"title": "투표제목",
	"item1": "[투표항목1]",
	"item2": "[투표항목2]",
	"item3": "[투표항목3]",
	"start_date": "2023-05-01",
	"done_date": "2023-05-10",
	"vote_user": {
			"id": 4,
			"profile" : "[이미지url]",
			"nickname": "도라에몽"
		},
	"result":{       				    # 투표 결과
			"result1_10": 1,      		# 첫번째 항목 선택한 10대 수
			"result1_20": 0,       		# 첫번째 항목 선택한 20대 수
			"result1_30": 0,
			"result1_40": 1,
			"result1_50": 1,
			"result2_10": 9,       		# 두번째 항목 선택한 10대 수
			"result2_20": 2,
			"result2_30": 0,
			"result2_40": 3,
			"result2_50": 4,
			"result3_10": 5,
			"result3_20": 3,
			"result3_30": 2,
			"result3_40": 1,
			"result3_50": 1,
		}
}

0개의 댓글