Django와의 관계를 처리하는 방법
django에서 일을 처리하는 방법에는 여러 가지가 있습니다. 하나는 독선적인 방법이고 다른 방법은 우리가 찾아야 할 움푹 들어간 곳입니다. 따라서 이러한 관계를 사용하는 사용 사례에 대해서도 논의할 것입니다. 갑시다.
외래 키 및 역방향 접근자.
Django에서 이러한 유형의 코드 중에 오류를 본 적이 있다면.
class Post(models.Model):
sender = models.ForeignKey(User, on_delete=models.CASCADE)
receiver = models.ForeignKey(User, on_delete=models.CASCADE)
오류는 "'Post.sender'에 대한 역방향 접근자가 'Post.receiver'에 대한 역방향 접근자와 충돌합니다."라고 말해야 합니다.
The thing is that django does not know how to access a users created posts(i.e the posts they are a sender of) and how to access their received posts (i.e the posts they are a receiver of).
이 혼동을 해결하려면 related_name 인수를 추가하는 것이 가장 좋습니다. 이렇게 하면 사용자가 받고 보낸 게시물에 액세스할 수 있습니다.
class Post(models.Model):
sender = models.ForeignKey(User, on_delete=models.CASCADE, related_name='sentposts')
receiver = models.ForeignKey(User, on_delete=models.CASCADE, related_name='receivedposts')
이렇게 하면 다음을 통해 보내고 받은 게시물에 액세스할 수 있습니다.
alan = User.objects.get(pk=1) #Got the user
posts_sent = alan.sentposts #Got the posts!!
more about that here
일대일 관계 및 불법 계정
사용자에게 더 많은 기능을 추가하고 싶은 앱과 같은 멋진 트위터가 있다고 가정해 보세요. 아마도 그에게 자신의 프로필 사진과 약력을 제공하고 그에 대한 프로필을 갖고 싶은 모든 것입니다. 그래서 당신은 이렇게-:
class Profile(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE, related_name="profile")
bio = models.CharField(max_length=400)
여기에서는 모든 것이 괜찮아 보이지만 이것은 큰 실수입니다.
이 실수는 이러한 모든 조인 간의 차이를 나타냅니다.
여기에서 프로필이 사용자뿐만 아니라 고유한 사용자와도 연결되기를 원합니다. 여기에서 적어도 이론적으로 사용자는 자신과 마찬가지로 다른 프로필을 가질 수 있습니다. 프런트엔드에서 중지할 수 있지만 백엔드에서 중지할 수 있다면 무슨 소용이 있습니까? 사용자가 프로필을 가지려면 할 수 있습니다.
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, related_name="profile")
bio = models.CharField(max_length=400)
이것은 당신의 두뇌와 앱의 시간을 절약합니다.
More about this here
다대다 필드 및 기술 용어
도서 라이브러리 앱을 원한다고 가정해 보겠습니다. 한 권의 책은 여러 작가가 쓸 수 있고 한 작가도 여러 책을 쓸 수 있습니다. 일대일 관계는 전혀 작동하지 않을 것이므로 외래 키도 결국 게시물과 같은 속성일 뿐이므로 단일 발신자와 수신자를 가질 수 있습니다.
class Author_list(models.Model):
Author1 = models.ForeignKey(User, related_name="author1")
Author2 = models.ForeignKey(User, related_name="author2"
class Book(models.Model):
author = models.ForeignKey(Author_list)
보시다시피 이 방법은 몇 명의 저자만 수용할 수 있으며 책에 한 명만 있는 경우 어떻게 합니까? 몇 가지를 null 가능 값으로 설정한 다음 시도할 수 있습니다. 이 방법은 많은 규모 관련 문제에 취약할 수 있습니다. 대신 다 대다 관계를 사용하십시오.
이것과 외래 키의 차이점은 외래는 하나의 값을 데이터베이스의 열로 저장하고 이것은 전체 목록을 저장한다는 것입니다. 걸작을 작성한 사용자 목록이라고 생각하십시오.
class Book(models.Model):
author = models.ManyToMany(User, related_name="books")
More information on that here
결론
게시물을 즐겁게 읽으셨기를 바랍니다. django와의 관계에 많은 행복을 기원합니다.
Tú Anh에서 Pixabay의 표지 이미지
Reference
이 문제에 관하여(Django와의 관계를 처리하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/ishanpro/how-to-handle-relationships-with-django-3gii텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)