2016-06-08 2 views
1

나는 휠을 재발 명하고 있다는 것을 알고 있지만, 나는 단지 django-friendship을 좋아하지 않으며 직접 쓰고 싶습니다.Django, 맞춤 사용자 모델이있는 친구를 추가하십시오.

따라서, 나는 당신이 볼 수 있듯이 내가 자기 또는 다른 말로 oneToMany 관계와 외래 키를 정의 사용자 모델 사람

class Person(AbstractBaseUser, PermissionsMixin): 

    username = models.CharField(('username'), max_length=75, unique=True, 
           help_text=('Required. 30 characters or fewer. Letters, numbers and ' 
              '@/./+/-/_ characters'), 
           validators=[ 
            validators.RegexValidator(re.compile('^[\[email protected]+-]+$'), 
                   ('Enter a valid username.'), 'invalid') 
           ]) 
    ....more other fields.... 
    friend = models.ForeignKey('self', related_name="friends", default=None, null=True) 

있습니다. 여기

내가 (내가 이름으로 내 친구에 추가 할 I 사용자를 얻고 친구

def add_friend(request, username): 
    if request.user.is_authenticated(): 
     user = Person.objects.get_by_natural_key(username) 
     if user is not None: 
      user.friend = request.user /// here 
     return HttpResponseRedirect('/profile/') 

을 추가 views.py에 있고 현재 사용자에 사용자 필드 (친구)을 설정할 것입니다 요청 사용자). 그러나 나는 여기서 뭔가 잘못하고 있다고 생각한다.

나는 내가 다른 방법을했다 그것을 구글려고했는데, 마지막에 ForeignKey('self')

답변

1

와 예를 찾을 수 didnt는

내가 ManyToMany과 계급 관계

class Person(AbstractBaseUser, PermissionsMixin): 
... things here... 
relationships = models.ManyToManyField('self', through='Relationship', 
              symmetrical=False, 
              related_name='related_to') 

및 클래스를 사용하는 대신 외래 키의

class Relationship(models.Model): 
from_person = models.ForeignKey(Person, related_name='from_people') 
to_person = models.ForeignKey(Person, related_name='to_people') 

내보기에서 r은 당신이 here 더 볼 수있는 사용자

def show_friends(request, username): 
    user = Person.objects.get_by_natural_key(username) 
    rel = user.relationships.filter(
     to_people__from_person=user) 
    args = {'friends': rel} 
    return render(request, "profile/friend_list.html", args) 

def add_friend(request, username): 
    if request.user.is_authenticated(): 
     user = Person.objects.get_by_natural_key(username) 
     Relationship.objects.get_or_create(
      from_person=request.user, 
      to_person=user) 
     return HttpResponseRedirect('/profile/') 

및 표시하는 목록을 가지고있다. 이 게시물은 내가 뭘 잘못하고 무엇을 바꿔야하는지 이해하는 데 도움이되었습니다.

+0

이것은 좋은 결과입니다! – marcusshep

관련 문제