USER

추가하기

class Question(models.Model):
    question_text = models.CharField(max_length=200, verbose_name='질문')
    pub_date = models.DateTimeField(auto_now_add=True, verbose_name='생성일')  
    owner = models.ForeignKey('auth.User', related_name='questions', on_delete=models.CASCADE, null=True)
    # auth의 유저 모델을 활용.
>>> from django.contrib.auth.models import User
>>> User
<class 'django.contrib.auth.models.User'> # User의 타입
<QuerySet [<User: admin>]>

# Question 모델에 user 필드 추가 후
>>> from polls.models import * 
>>> user = User.objects.first()
>>> user.questions.all() 
>>> print(user.questions.all().query)
SELECT "polls_question"."id", "polls_question"."question_text", "polls_question"."pub_date", "polls_question"."owner_id" FROM "polls_question" WHERE "polls_question"."owner_id" = 1

#related_name을 지정해 줌으로써 user의 question을 불러올 때 questions로 가져올 수 있게 해줌

관리하기

1. serializer에 추가

from django.contrib.auth.models import User

class UserSerializer(serializers.ModelSerializer):
    questions = serializers.PrimaryKeyRelatedField(many=True, queryset=Question.objects.all())
    # User은 여러 question을 가질 수 있음.
    class Meta:
        model = User
        fields = ['id', 'username', 'questions']
        # id, username, questions 필드

2. view에 추가

from django.contrib.auth.models import User
from polls_api.serializers import UserSerializer

class UserList(generics.ListAPIView):
    queryset = User.objects.all()
    serializer_class = UserSerializer
    
class UserDetail(generics.RetrieveAPIView):
    queryset = User.objects.all()
    serializer_class = UserSerializer

3. url 추가

from django.urls import path
from .views import *

urlpatterns = [
    path('question/', QuestionList.as_view(), name='question-list'),
    path('question/<int:pk>/', QuestionDetail.as_view()),
    # 유저 url 추가
    path('users/', UserList.as_view(),name='user-list'),
    path('users/<int:pk>/', UserDetail.as_view()),

 

생성하기

1. Form 이용

 

2. Serializer 이용

'데브코스 > Week 5' 카테고리의 다른 글

Week 5 - 5  (0) 2024.04.12
Week 5 - 3  (0) 2024.04.10
Week 5 - 2  (0) 2024.04.09
Week 5 - 1  (0) 2024.04.08

+ Recent posts