# ManyToManyField

22개의 포스트

[장고]FK (foreignkey), ManyToManyField, OneToOneField형식.

PK와 FK란? : 링크텍스트 저번시간의 PK와 FK를 설명했는데, 좀더 Fk와 그 외의 설명이 필요할거 같아 다시 새로운 글을 팠다. Django의 모델 필드는 데이터베이스 테이블의 열(Column)을 정의하는데 사용되며, 웹 애플리케이션의 데이터 모델을 구성한다. 그렇다면 먼저 모델의 필드는 어떤 종류가 있을까? 참조:링크텍스트) 대표적인것만 보자면, >CharField: CharField는 짧은 문자열을 저장하기 위한 필드입니다. max_length 매개변수로 최대 문자열 길이를 지정해야 합니다. 예: models.CharField(m

2023년 9월 6일
·
0개의 댓글
·
post-thumbnail

[Do it 장고 + 부트스트랩] 14장. 다대다 관계 구현하기

13장에서 공부한 다대일 관계와 달리 인스타그램의 해시태그처럼 blog 앱에 태그 기능을 추가하면서 다대다 관계에 대해 학습한다. 📌Tag 모델 만들기 다음 그림과 같이 태그는 카테고리와는 다르게 포스트 모델의 레코드는 Tag 모델의 여러 레코드와 연결될 수 있으며, Tag 모델의 레코드도 여러 포스트 모델의 레코드와 연결될 수 있다. 이러한 관계를 다대다 관계(Many To Many) 라고 한다. 📖Tag 모델 구현하기 👉models.py에 Tag 모델 작성하기 Tag 모델은 Category 모델을 복사하여 getabsoluteurl() 함수에서 category 부분을 tag로 수정하고, Meta 클래스를 지워 구현했다. 이제 Post 모델에 tags

2023년 6월 15일
·
0개의 댓글
·

[django] ManyToManyField에 대하여

ManyToMany, 다대다 관계 예를 들어 슈퍼마켓과 아이스크림이 있다고 가정해보자. 한 슈퍼마켓은 여러 아이스크림을 납품받을 수 있고, 한 아이스크림은 여러 슈퍼마켓에 납품될 수 있다. 이것이 다대다 관계이며, django에서는 ManyToManyField로 정의된다. 공식문서 예시 및 주요 메소드 공식문서 예시를 보자. Publication과 Article의 각 객체를 1개씩 생성한다. 각 객체를 다대다 관계로 엮으려면 add()를 사용하면 된다. 즉, add()는 객체를 추가하는 개념이 아니라 관계를 associate 하는 것이다. 여러 개 객체를 add하는 것도 가능하다. create()를 사용하면 객체 생성, 관계 연결을 모두 진행할 수 있다. a1과 associate된 new_p를 생성한다 new_p의 값은 `title = 'Highlights for C

2022년 8월 5일
·
0개의 댓글
·
post-thumbnail

[Django] 비 SPA 방식으로 장고 Forms/Views를 적극 활용한 인스타그램 St 만들기#11_포스팅 좋아요/취소 구현

1) > M:N 관계를 설정할 때 중요한 건 부모 테이블의 설정인 것 같다. 아래는 post의 부모 Post와, user의 부모 AUTHUSERMODEL이 보다 명시적으로 적혀있다. 위는 더 일반적인 ManyToManyField의 선언인데 여기서도 Post와 AUTHUSERMODEL을 확인할 수 있다. 이때 둘을 묶어주는 likeuserset이 User의 instance들의 묶음처럼 이해될 수 있음에 주목하자. 2) > Post.objects.filter(author=user)와 user.postset.all()은 같은 결과 값을 반환하는데 likeuserset 코드를 활성화했을 때 postset과 충돌이 났다. >> 각각의 relastedname을 'mypostset', 'likepost_set'으로 변경한다. >>> Post 클래스-User 외래키의 경우 user.mypostset만 가능하고 Post 클래스-User M:N의 경우 (like_us

2022년 7월 15일
·
0개의 댓글
·
post-thumbnail

[Django] 비 SPA 방식으로 장고 Forms/Views를 적극 활용한 인스타그램 St 만들기#10_User 모델에 Follow_Unfollow 관계 필드를 구현하고, Follow 기능 구현

1) > self를 지정함으로써 ManyToMany 관계를 User 간의 관계로 만들 수 있다. 최초 follow가 없을 수도 있으니 blank는 허용해준다 2) >자신을 제외한 유저 인스턴스를 User가 아닌 getusermodel()로 취하고 이를 리스트로 넘겨줘서 sidebar에서 순회하는데 사용한다. 3) Input Output Input Output > URL Reverse에서는 path/re_path에 지정된 URL 문자열을 생성해준다. {% url "client1" 1234 %} 와 {% url "client2" 1234 %} 는 URL 문자열이 어떻게 조합되는 지 신경쓰지 않아도, path name과 인자만 넘겨주면 된다. URL reverse 코드는 같아도 참조하는 코드에 따라서 값이 달라질 수 있는 것이다. 4) > instagram 앱에서는 getobjector404 사용 시에 getuser_model() 함수가 들어갔는데 여긴 Use

2022년 7월 15일
·
0개의 댓글
·
post-thumbnail

[Django] 비 SPA 방식으로 장고 Forms/Views를 적극 활용한 인스타그램 St 만들기#10_User 모델에 Follow_Unfollow 관계 필드를 구현하고, Follow 기능 구현

1) > self를 지정함으로써 ManyToMany 관계를 User 간의 관계로 만들 수 있다. 최초 follow가 없을 수도 있으니 blank는 허용해준다 2) >자신을 제외한 유저 인스턴스를 User가 아닌 getusermodel()로 취하고 이를 리스트로 넘겨줘서 sidebar에서 순회하는데 사용한다. 3) Input Output Input Output > URL Reverse에서는 path/re_path에 지정된 URL 문자열을 생성해준다. {% url "client1" 1234 %} 와 {% url "client2" 1234 %} 는 URL 문자열이 어떻게 조합되는 지 신경쓰지 않아도, path name과 인자만 넘겨주면 된다. URL reverse 코드는 같아도 참조하는 코드에 따라서 값이 달라질 수 있는 것이다. 4) > instagram 앱에서는 getobjector404 사용 시에 getuser_model() 함수가 들어갔는데 여긴 Use

2022년 7월 15일
·
0개의 댓글
·
post-thumbnail

[Django] 비 SPA 방식으로 장고 Forms/Views를 적극 활용한 인스타그램 St 만들기#6_instagram 앱 생성과 포스팅 쓰기 구현

1) > instagra의 urls.py에 있는 각각의 path들이 prefix없이 작동할 수 있도록 2) > 외래키에서는 모델의 참조가 되는 클래스와 on_delete 옵션을 지정해줘야 한다. 3) > instagram 앱에서 모델을 만들고 makemigations까지 실행했으나 migrate에서 오류가 났다. accounts 앱에 적용된 0003 파일과 적용 안된 0003 파일이 있었는데, 적용 안된 0003을 지우고 정상적으로 실행됐다. 4) > urls.py에서 app_name을 지정해줬고 path name도 붙여줄 수 있다. "새 포스팅 쓰기"를 클릭 시 urls.py에 지정돼 있는 /post/new로 넘어간다. 5) > request는 valid하더라도 필수 항목인 author가 채워지지 않고 commit=True로 넘어갈 경우 IntegrityError가 발생할 것이므로 post.author를 저장하고 post.save()를 진행한다. 6) > 포스팅

2022년 7월 13일
·
0개의 댓글
·
post-thumbnail

[DRF] Issue Report - ManyToManyField와 related_name

Issue Report - ManyToManyField와 related_name 🚩상황 사용자가 질문글과 답글을 작성하면, 다른 사용자는 좋아요를 각각 질문글과 답글에 상호작용할 수 있음 그렇기 때문에 질문글과 답글에 각각 좋아요 필드가 필요함 사용자-질문글 테이블에 M:M으로 연결되는 질문글 좋아요 테이블과 사용자-답글 테이블에 M:M으로 연결되는 답글 좋아요 테이블을 각각 생성하고 싶음 ERD 대로 코드를 작성하고, migrations을 하는 중 하기와 같은 오류코드를 뱉어냈다. 작성된 ERD대로 ManyToMany 필드를 작성하려고 하자 오류가 발생하면서 마이그레이션이 실행되지 않았음 🚩오류코드 ![](https://velog.velcdn.

2022년 7월 12일
·
0개의 댓글
·
post-thumbnail

[Django] 장고 Models를 활용한 데이터베이스 처리#8_관계를 표현하는 모델 필드

1) > post 같은 경우는 post_id 형식으로 필드를 생성하기 위한 가상의 필드라서 실제 db 필드와는 다르다. 2) > post_id 값을 확인하고 이를 다시 pk에 할당해서, Post 모델의 객체에서 이와 맞는 것을 찾는 방식보다 Comment 모델을 정의할 때 "Post와 관련있어~" 라고 걸고 넘어간 부분을 통해 comment.post(가상의 필드)로 구하는 방법이 더 직관적이고 효율적이다. 3) Input Output ... Input Output > 쿼리셋의 select는 Comment에 대해서 한 번, Post에 대해서 한 번, 총 두 번 이뤄진다. 4) > 세 값의 결과는 같은데 특히 postid = 4는 comment의 직접적인 필드 값 'postid'를 찾는 경우이고 post__id = 4는 외래키 'post'로 엮인 실제 Post 측의 id 값을 확인하는 경우이다. >> 1:n 의 관계에서 1 측은 참조할 이름이 없는데 이렇게 '모델

2022년 7월 8일
·
0개의 댓글
·
post-thumbnail

[Django] M to M model과 ManyToManyField

과제 진행중 문제가 생겼던 부분에 대해 남긴다. ManyToMany model 아래와 같이 ManyToManyField를 Actors 모델에 작성했고 Movies모델은 일반 모델과 같이 작성했다. 다대다 관계를 정의할때 따로 Forignkey를 받을 모델 클래스를 작성하지 않고 ManyToManyField를 클래스 속성으로 포함해 사용할 수 있다. 다른 속성들과 다르게 ManyToManyField를 사용하면moveis는 컬럼이 생성되는게 아니고 매니저클래스가 된다. 즉, movies를 데이터를 참조해 가져올 수 있다. ManyToManyField를 사용해 아래와 같은 다대다관계 테이블을 만들 수 있다. ![](https://velog.velcdn.com/images/tmqjf4921/po

2022년 7월 6일
·
0개의 댓글
·

[Python] Django - ManyToManyField

✅ 소개 이번 포스팅에서도 httpie를 이용하여 HTTP 통신 연습을 해보겠습니다. 이전 포스팅에서는 일대다 관계를 갖고 있는 두개의 테이블에 데이터를 추가하고, 조회하는 작업을 했는데요. 이번에는 아래의 사진과 같이 다대다 관계를 갖고 있는 두개의 테이블에 대해 CRUD를 구현해보려고 합니다. 다대다관계를 갖는 테이블의 경우 중간테이블을 생성하는 모델링 방식을 사용하는데요. 저는 Django에서 다대다관계를 정의할 수 있는 ManyToManyField를 사용해보고, 이 ManyToManyField를 사용하였을 때의 장점이 무엇인지 알아보겠습니다. 이번 CRUD 구현을 위한 준비 요소는 다음과 같습니다. 프로젝트 준비 요소 초기세팅 - 가상환경, 파이썬

2022년 6월 9일
·
0개의 댓글
·
post-thumbnail

[Django]ManyToManyField

📍ManyToManyField 자동으로 중간 테이블을 설정 정참조와 역참조 객체 호출 정참조의 경우 : 속성으로 접근 역참조의 경우 : set 또는 relatedname 으로 접근 🌱 models.py 1. ManyToManyField()쓰지않고 다대다 연결하기 2. ManyToManyField()사용하여 다대다 연결하기 위 두가지 방법 모두 결과는 아래와 같다. ManyToManyField()사용하면 별도의 중간테이블을 만들지 않아도 자동으로 allergies_drinks라는 테이블이 생성되고 자동으로 외래키를 받는다 👉 테이블명으로 직접 지정하고 싶다면 데이터 접근하기 1번 방법으로 다대다 연결을 할 때에는 데이터를 가져

2022년 6월 8일
·
0개의 댓글
·
post-thumbnail

[Django]ManyToManyField(feat.views.py)

🌱views.py 🌱httpie GET http -v GET 127.0.0.1:8000/movies/actor http -v GET 127.0.0.1:8000/movies/movie

2022년 6월 8일
·
0개의 댓글
·
post-thumbnail

[Django]ManyToManyField(feat.models.py)

📍ManyToManyField 🌱models.py 내가 만든 테이블은 actors와 movies 2개지만 ManyToManyField()을 사용하여 actors_movies 라는 테이블이 자동을 생성되었다. actorsmovies테이블은 id,actorid,movie_id로 구성되어있다. 데이터 넣기 ![

2022년 6월 8일
·
0개의 댓글
·

장고 ManyToManyField 정리

장고 model의 ManyToManyField는 유용하긴 하지만 헷갈리는 것들이 많아 정리가 필요하다 먼저 왜 foreignkey대신 manytomanyfield를 써야하는지 생각해봐야 한다. 영화배우와 영화의 관계나 피자와 토핑의 관계같은걸 연상하면 쉽다. 둘 다 다대다 관계의 좋은 예시이다. 이런 유형의 테이블들은 manytomanyfield를 사용하는게 여러 장점이 있다. 단 장고 ORM에는 manytomanyfield 기능이 있지만 다른 프레임워크에는 없을수도 있기 때문에 manytomanyfield 쓰지 않고 foreignkey로만 연결하는것도 연습해봐야 한다. 데이터 입력 순서 다대다 관계로 묶인 테이블은 서로 간의 데이터 입력 순서가 중요하다. 배우와 영화 테이블이 있고 장고 models에서 영화테이블에서 배우테이블을 manytomanyfield로 설정한 경우, 배우 테이블부터 데이터를 입력해야 한다. 또한 두 테이블간의 관계를 만들때 반드시 두 테이블에

2022년 5월 10일
·
0개의 댓글
·
post-thumbnail

select_related, prefetch_related, ManytoManyField

Models.py select_related(정참조)효과 >Function : book_list Number of Queries : 101 Finished in : 0.08s >Function : book_list Number of Queries : 101 Finished in : 0.08s prefetch_related(역참조)효과 > Function : store_list Number of Queries : 11 Finished in : 0.02s >Function : storelistexpensivebooksprefetch_related Number of Queries : 12 Finished in : 0.05s fetch -> SQL query 문 Manytomanyfield through Manytomanyfield는 자동으로 middletable을 만들어준다. 수동으로 그 model class를 정의

2022년 3월 23일
·
0개의 댓글
·

[django] C.R.U.D 2 (2) 배우와 영화 (feat. manytomanyfield)

django - C.R.U.D 2 2편 배우 테이블과 영화 테이블을 만들어서 N:N 관계의 테이블과 해당 앱을 완성시켜 보자. 기존에는 ForeignKey를 사용해서 테이블 관계를 형성했는데, 이번에도 ForeignKey를 우선 먼저 사용해봤다. ForeignKey를 만들면 결국 중간테이블 ActMovie를 만들어야 한다. 그래야 각 column 별로 ForeignKey를 생성할 수 있기 때문. 하지만 manytomanyfield는 다르다. django documentation 의 예시를 통해서도 보듯이, 1) 중간테이블을 별도로 만들어줄 필요가 없으며 (manytomanyfield는 참조를 더 많이 할 것 같은 클래스에 넣으면 됨) 2) 바로 N:N 관계의 테이블에 가서 데이터를 갖

2022년 3월 17일
·
0개의 댓글
·

M : M 와 models.ManyToManyField()

이전 추가 과제인 actor와 movie를 다대다 관계로 class를 작성한 후 DB에 데이터를 입력해보는 과제할당시에, 메인과제까지만 진행해서 다대다에 관련된 model을 작성을 처음하면서 내가 이해한 것을 기록해보려고 한다. 1. 다대다 (M:M)이란? 여러개가 여러개를 참조하고 있다. ex) +) 일대일 ( 1:1) 일대다 ( 1:M) 1) 중간테이블과 연관되는 클래스 : ManyToManyField를 사용하게 될 경우, 중간테이블 2) through 옵션 : 중간 모델의 calss명을 수동으로 정의 (throgh을 정의하지 않아도, 관계 유지를 위해 생성되는 테이블의 모델 class가 생성됨)

2021년 11월 30일
·
0개의 댓글
·

Django ManyToManyField TIL

영화배우와 영화가 N : N 으로 연결되있는 모델이다. Actor 인스턴스와 Movie 인스턴스가 다대다로 연결 시 Junction Table을 생성하여야 하지만 models.ManyToManyField를 통해 따로 테이블을 만들 필요가 없다. Django 에서 제공되는 모듈의 기능으로 자동으로 연결 테이블생성하여 연결하기 때문이다. 사용법은 다음과 같다. 테이블 생성 정참조하는 테이블에서의 값추가, 제거 역참조하는 테이블에서의 값추가, 제거 전체 제거 Junction table에서 추가적인 column 값이 존재하지 않으면 테이블을 생성하지않고 ManyToManyField를 통해 테이블간 N:N 연결하여 쓸 수 있다.

2021년 11월 15일
·
0개의 댓글
·
post-thumbnail

2021.04.30

공부시간 11시간 21분 Django C.R.U.D(2) - viewtask만들기-(선택 과제) 과제 등록된 배우 목록을 리턴해주는 GET 메소드를 구현해주세요 배우의 이름, 성, 그리고 출연한 영화 제목 목록 2.등록된 영화 목록을 리턴해주는 GET 메소드를 구현해주세요. 영화의 제목, 상영시간, 출연한 배우 목록 (이름만) models.py > actor테이블은 movie테이블을 actor_movie테이블을 통해 정참조 중이다.

2021년 4월 30일
·
0개의 댓글
·