2011-02-05 3 views
0

첫 번째 장고 응용 프로그램을 만들고 모델을 만들려고 노력하고 있지만 간단한 모델 관계가되어야한다고 생각하는 것을 만드는 방법에 집착하고 있습니다. 사용자 이름, 암호 (해시), 가입 날짜 등의 일반적인 특성을 가진 사용자를위한 모델을 만들고 싶습니다. 그런 다음이 사용자를이 사이트의 모든 친구/팔로어와 연결할 수 있기를 바랍니다. 하지만 내가 꼼짝 못하는 이유는 한 사용자가 많은 친구를 가질 수 있기 때문에 그 관계를 설정하는 방법입니다. User 테이블의 기본 키를 키 수 있습니다.하지만 기본 키가있는 친구 테이블의 모델을 만드는 방법은 무엇입니까? 사용자 테이블은 두 가지 기능을 제공합니다. 하나는 사용자에 대한 매핑으로, 다른 모든 기능은 기본 키로 매핑됩니다.많은 관계가없는 친구가있는 사용자를위한 스키마 만들기?

from django.db import models 

class User(models.Model): 
    username = models.CharField(max_length=50) 
    password = models.CharField(max_length=200) 
    dateJoined = models.DateField('date joined') 

class Friends(models.Model): 
    user = models.ForeignKey(User) 
+1

왜 "많은 관계가 없습니까?" 이것이 바로 이것이 다기간 관계입니다. User.ID에 대한 외래 키인 두 개의 열이있는 하나의 테이블. –

+1

다소 관련이 있습니다 ... 장고 인증 모듈을 실제로 사용해야합니다. 사용자 관리를 많이 쓰지 않아도됩니다. http://docs.djangoproject.com/en/dev/topics/auth/ –

+0

@RJ 도움이되었지만 여전히 사용자와 친구 간의 관계에 도움이되지는 않습니다. – adam0101

답변

2

첫째, 대신 장고에 내장되어 제공 하나를 사용, 당신이 당신의 자신의 사용자 모델을 생성하지 않는 것이 좋습니다 것입니다. 찾고있는 모든 분야를 처리합니다.

둘째, "프로필"모델을 만들어 내 친구들을 저장해 두었습니다. 여기 보라 것에 프로파일은 다음과 같습니다가 여기에 표시됩니다으로 http://docs.djangoproject.com/en/1.2/topics/auth/#storing-additional-information-about-users

셋째, 프로필 모델에서, 나는 정확히 친구를위한 필드를 추가 : 그런 다음 user.get_profile().friends.all() 같은 사용자의 친구에 액세스 할 수 있습니다 http://docs.djangoproject.com/en/1.2/ref/models/fields/#django.db.models.ManyToManyField.symmetrical

. 약간 장황하지만 물건을 깨끗하게 유지합니다.

0
CREATE TABLE friends (user_id int, friend_id int) 

두 열은 사용자 ID를 참조. 나는 장고 모델을 모르지만, 당신의 코드에서 추측, 그것은처럼 보일 것 :

class Friends(models.Model): 
    user = models.ForeignKey(User) 
    friend = models.ForeignKey(User) 
+0

제안 된 라인을 추가하기 전에 모델이 검증됩니다. 그렇게하면 다음 오류가 발생합니다. 오류 : 하나 이상의 모델이 유효성을 검사하지 않았습니다. gamer.friends : 'user'필드의 접근자가 'User.f riends_set'필드와 충돌합니다. 'user'에 대한 정의에 related_name 인수를 추가하십시오. gamer.friends : 필드 'friend'에 대한 접근자가 'User.friends_set'관련 필드와 충돌합니다. 'friend'에 대한 정의에 related_name 인수를 추가하십시오. – adam0101

+2

related_name을 추가해야합니다. 'user = models.ForeignKey (User, related_name ='friends ')'및'friend = models.ForeignKey (User, related_name ='following ')'와 같은 것입니다. 그런 다음'user.friends.filter (dateJoined__gte = ...) '와 같은 관련 관리자에 액세스 할 수 있습니다. –

관련 문제