- delete
- regexp
- drf
- DB
- ORM
- migrations
- 트리
- Django
- distinct
- 큐
- count
- Article & User
- 쟝고
- Tree
- 그리디
- Vue
- 백트래킹
- Queue
- stack
- N:1
- 완전검색
- 통계학
- create
- 뷰
- SQL
- 스택
- M:N
- 이진트리
- outer join
- update
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
목록Django (61)
데이터 분석 기술 블로그
annotateSQL의 GROUP BY 쿼리를 사용합니다.문제 상황annotate 적용문제를 해결해 봅시다.게시글을 조회하면서 댓글 개수까지 한 번에 조회해서 가져옵니다.# views.pydef index_1(request): # articles = Article.objects.order_by('-pk') articles = Article.objects.annotate(Count('comment')).order_by('-pk') context = { 'articles': articles, } return render(request, 'articles/index_1.html', context)댓글 개수 : {{ article.comment__count }}"11 qu..
Improve query같은 결과를 얻기 위해 DB 측에 보내는 쿼리 개수를 점차 줄여 조회합니다.1. 사전 준비데이터게시글 10개 / 댓글 100개 / 유저 5개모델 관계N:1 - Article:User / Comment:Article / Comment:ArticleN:M - Article:Userpython manage.py migratepython manage.py laoddata users.json articles.json comments.jsonInstalled 115 object(s) from 3 fixture(s)2. 종류annotateselect_relatedprefetch_relatedselect_related & prefetch_related
1. FixturesDjango가 데이터베이스로 가져오는 방법을 알고 있는 데이터 모음입니다. 데이터베이스 구조에 맞추어 작성되어있습니다.2. 초기 데이터 제공Fixtures의 사용 목적입니다.3. Fixtures 활용3-1 사전 준비M:N까지 모두 작성된 Django 프로젝트에서 유저, 게시글, 댓글 등 각 데이터를 최소 2~3개 이상 생성해 둡니다.3-2 fixtures 관련 명령어dumpdata: 생성 (데이터 추출)loaddata: 로드 (데이터 입력)3-3 dumpdata데이터베이스의 모든 데이터를 추출합니다. 추출한 데이터는 json 형식으로 저장합니다.# 작성 예시python manage.py dumpdata [app_name[.ModelName] [app_name[.ModelName] ....
User(M) - User(N)0명 이상의 회원은 0명 이상의 회원과 관련이 있습니다. 즉, 회원은 0명 이상의 팔로워를 가질 수 있고, 0명 이상의 다른 회원들을 팔로잉할 수 있습니다.ManyToManyFiled를 작성합니다.참조 : 내가 팔로우하는 사람들(팔로잉, followings)역참조 : 상대방 이밪에서 나는 팔로워 중 한 명 (팔로워, followers)바뀌어도 상관 없으나 관계 조회 시 생각하기 편한 방향으로 정한 것입니다.# accounts/models.pyclass User(AbstractUser): followings = models.ManyToManyField('self', symmetraicl=False, related_name='followers')Migrations 진행 후..
프로필 페이지각 회원의 개인 프로필 페이지에 팔로우 기능을 구현하기 위해 프로필 페이지를 먼저 구현해 봅시다.url을 작성합니다.# accounts/urls.pyurlpatterns = [ ... path('profile//', views.profile, name='profile'),]view 함수를 작성합니다.# accounts/views.pyfrom django.contrib.auth import get_user_modeldef profile(request, username): User = get_user_model() person = User.objects.get(username=username) context = { 'person': person, } ..
좋아요 기능 구현url 작성합니다.# articles/urls.pyurlpatterns = [ ... path('/likes/', views.likes, name='likes'),]view 함수를 작성합니다.# articles/views.py@login_requireddef likes(request, article_pk): article = Article.objects.get(pk=article_pk) if request.user in article.like_users.all(): article.like_users.remove(request.user) else: article.like_users.add(request.user) return redi..
# 변경 전doctor.patient_set.all()# 변경 후doctor.patients.all()ManyToManyField(to, **options)Many to many 관계 설정 시 사용하는 모델 필드입니다.1. ManyToManyField's Arguments1-1 'related_name' arguments역참조시 사용하는 manager name을 변경합니다.class Patient(models.Model): doctors = models.ManyToManyField(Doctr, related_name='patients') name = models.TextField()1-2 'symmetrical' argumentsManyToManyField가 동일한 모델을 가리키는 정의에서만 ..
'through' argument중개 테이블에 '추가 데이터'를 사용해 M:N 관계를 형성하려는 경우에 사용합니다.through 설정 및 Reservation Class를 수정합니다. 이제는 예약 정보에 "증상"과 "예약일"이라는 추가 데이터가 생깁니다.class Patient(models.Model): doctors = models.ManyToManyField(Doctor, throug='Reservation') name = models.TextField() def __str__(self): return f'{self.pk}번 환자 {self.name}'class Reservation(models.Model): doctor = models.ForeignKey(D..