Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- GCP
- AWS
- 데이터 시각화
- 팀 프로젝트
- beuatifulsoup
- 코딩테스트
- Snowflake
- Spark
- 코딩 테스트
- airflow
- Til
- 슈퍼셋
- 데브코스
- PCCP
- Kafka
- django
- VPC
- 코테 연습
- Selenium
- Tableau
- SQL
- cloud platform
- 데이터 엔지니어
- superset
- HTML
Archives
- Today
- Total
주니어 데이터 엔지니어 우솨's 개발일지
유저(User)와 기능(투표, 질문) 본문
user추가하기
polls.models.py
owner = models.ForeignKey('auth.User', related_name='questions', on_delete=models.CASCADE, null=True)
RelatedField
polls_api/serializers.py
questions = serializers.PrimaryKeyRelatedField(many=True, queryset=Question.objects.all())
유저 질문이 프라이머리키(id)로 나옴
questions = serializers.StringRelatedField(many=True, read_only=True)
유저 질문이 string method로 나옴
questions = serializers.SlugRelatedField(many=True, read_only=True, slug_field='pub_date')
필드중 아무거나 정해서 그 내용을 표시(이번엔 pubdate로 지정)
questions = serializers.HyperlinkedRelatedField(many=True, read_only=True, view_name='question-detail')
유저 질문이 하이퍼 링크를 제공
투표기능 만들기
polls/models.py
class Vote(models.Model) :
question = models.ForeignKey(Question, on_delete=models.CASCADE)
choice = models.ForeignKey(Choice, on_delete=models.CASCADE)
voter = models.ForeignKey(User, on_delete=models.CASCADE)
class Meta :
constraints = [ models.UniqueConstraint(fields=['question', 'voter'], name = 'unique_voter_for_questions')]
#투표된 갯수를 알려줌
polls_api/serializers.py
class ChoiceSerializer(serializers.ModelSerializer) :
votes_count = serializers.SerializerMethodField()
class Meta :
model = Choice
fields = ['choice_text','votes_count']
def get_votes_count(self, obj) :
return obj.vote_set.count()
polls_api/views.py
#내가 작성한 vote들만 보여주는 기능
class VoteList(generics.ListCreateAPIView) :
serializer_class = VoteSerializer
permission_classes = [permissions.IsAuthenticated] #로그인한사람만 가능
def get_queryset(self, *args, **kwargs) :
return Vote.objects.filter(voter=self.request.user)
def perform_create(self, serializer) :
serializer.save(Voter=self.request.user)
#작성자만 볼 수 있음
class VoteDetail(generics.RetrieveUpdateDestroyAPIView) :
queryset = Vote.objects.all()
serializer_class = VoteSerializer
permission_classes = [permissions.IsAuthenticated,IsVoter]
vote의 url 설정
path('vote/', VoteList.as_view()),
path('vote/<int:pk>', VoteDetail.as_view()),
polls.api/urls.py
'Django' 카테고리의 다른 글
Django 기본 (0) | 2024.04.28 |
---|---|
테스트 기능(Test) (0) | 2024.04.28 |
시리얼라이저(Serializer)와 에러(Error) (0) | 2024.04.28 |
뷰(View)와 템플릿(template) (1) | 2024.04.28 |