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 |