2014-01-05 7 views
0

나는 '팩트 퍼블리싱, 장고로 웹 사이트 개발 학습하기'라는 책을 읽고 있는데, 사용자가 기사를 읽고 북마크에 추가하거나 기사에 URL을 저장할 수있는 북마크 웹 사이트를 만드는 방법에 대한 자습서를 작성하고 있습니다. 여기에 models.py 지금Django - User 객체의 모든 속성?

from django.db import models 
from django.contrib.auth.models import User 
# Create your models here. 

class Link(models.Model): 
    url = models.URLField(unique=True) 

class Bookmark(models.Model): 
    title = models.CharField(max_length=200) 
    user = models.ForeignKey(User) 
    link = models.ForeignKey(Link) 

이다, 이것은 (사용자 이름이보기에 매개 변수로 전달) 내 user_page보기

def user_page(request, username): 
    try: 
     user = User.objects.get(uesrname=username) 
    except: 
     raise Http404('Requested user not found.') 

    bookmarks = user.bookmark_set.all() 
    variables = { 
     'username': username, 
     'bookmarks': bookmarks 
    } 

    return render(request, 'user_page.html', variables) 

내가 라인에 대한 혼란 스러워요입니다

bookmarks = user.bookmark_set.all() 

나는 '사용자'가 사용자 객체이지만, 장고에서 제공하는 일반적인 사용자 모델을 사용하고 있음을 이해합니다. 사용자 이름, 비밀번호 및 이메일 만 있습니다. 맞습니까? 그렇다면 bookmark_set은 어디에서 오는 것입니까? 왜냐하면 책갈피 클래스에서 모든 책갈피에 액세스하려고하면 적어도 'b'는 bookmark_set에서 대문자 여야하지 않으니까? _set는 무엇을합니까? 이 책에서, 내가 google'ing 시도

"우리는 편리하게 bookmark_set를 사용할 수있는 사용자 개체에서 사용할 속성을 특정 사용자 개체에 대한 책갈피 목록을 얻으려면"

을 말함으로써이 라인을 설명합니다 사용자 개체에 사용할 수있는 모든 특성을 있지만 아무것도 찾을 수 없습니다. 사용자 개체에 사용할 수있는 모든 특성 목록이있는 웹 사이트가 있습니까?

답변

1

bookmark_set는 Bookmark 정의에서 오는보다 구체적으로, 선에서

user = models.ForeignKey(User)

이 줄은 사용자가 Bookmark 모델 속성을 만들지 만 User 모델에 bookamrk_set 속성을 also 추가!

이 내용은 django documentation에서 설명합니다. 완성을 위해 나는 문서에서 복사하고있다.

장고는 관계의 "다른"쪽에 대한 API 접근 자, 즉 관계 모델에서 관계를 정의하는 모델에 대한 링크를 생성한다. 예를 들어, Blog 객체 b는 entry_set 속성 인 b.entry_set.all()을 통해 관련된 모든 Entry 객체의 목록에 액세스 할 수 있습니다.

1

ForeignKey의 반대쪽/"반대쪽"입니다. Bookmark에서 User까지의 FK가 있으므로 Django는 자동으로 bookmark_set을 사용자에게 생성합니다. 당신은이 설명 장고 튜토리얼을 완료해야 Following relationsips "backward"

1

:

는 공식 장고 설명서를 참조하십시오.

bookmark_set는 사용자에 즐겨 찾기 및 지점에 정의 년대 외래 키에 대한 역의 관계입니다. Django의 모든 외래 키는이 역방향 접근자를 가져옵니다.이 경우에는 사용자의 특정 사용자 객체와 관련된 모든 책갈피가 제공됩니다.