2014-09-16 2 views
0

장고를 처음 접했을뿐 아니라 다른 모델의 사용자 프로필과 리뷰를 표시하는 페이지 작업을하고 있습니다.장고에서 두 개의 다른 모델을 연결하는 방법

내가 조금은 확신 할 수없는 부분은 다른 테이블이나 모델을 연결하는 방법입니다. 제가하려는 것은 극히 기본입니다. 거의 사용자 이름을 클릭하자마자 프로파일 페이지로 이동하여 하단의 모든 사용자 리뷰를 표시합니다. 'name = ben'대신 변수를 사용하고 'name = user_you_clicked_on'과 같이 변경할 수 있는지 궁금합니다.

바라건대 내가 바라는 바는 말이되며 어쩌면 올바른 방향으로 향하게 될 수 있습니다. 외래 키를 사용해 보라고했는데 그게 내가하려고하는 것이 확실하지 않습니다.

from django.shortcuts import render 

def index(request): 
    profile_info = User.objects.filter(name=‘ben’) 
    context = {‘profile_info’: profile_info}  
    latest_reviews = UserReview.objects.filter(name=‘ben').order_by('-pub_date')[:5] 
    context = {‘profile_info’: profile_info, 'latest_reviews': latest_reviews} 
    return render(request, 'randomtemplate.html', context) 
+0

장고 자습서를 작성 했습니까? 모델 간의 이런 종류의 관계는 꽤 잘 다뤄집니다. 일반적으로 실제로 이름보다는 외래 키를 사용하고 URL에서 캡처합니다. 'UserReview' 모델에서 사용자의 이름을 필드로 저장하는 것처럼 보입니다. 이것은 나쁜 생각입니다. 표준 데이터베이스 정규화 지침을 위반하는 것은 물론 이런 종류의 작업을 어렵게 만듭니다. –

+0

아마도 UserReview 행 수를 User 행에 연결하는 외래 키 관계를 추가하는 것이 좋습니다. 설명을 참조하십시오. https://docs.djangoproject.com/en/1.7/topics/db/examples/many_to_one/ – rje

+0

그런데 외래 키를 사용하여 사용자 리뷰를 조회 할 필요가 없습니다. 'UserReview.objects.filter (user__name = 'ben')'와 같은 문법을 사용할 수있다. UserReview 모델 클래스에 User 인스턴스를 참조하는 "user"속성이있는 외래 키 릴레이션을 설정했다고 가정합니다. – rje

답변

0

당신은 pass username in the URL (ID 더 나은하지만 이제이 복잡하게하지 말자 것) 할 수 있습니다

urlpatterns = patterns('', 
    url(r'^user/(?P<username>\w+)/', 'index'), 
) 

그런 다음보기는 다음과 같이 수 :

경우
def index(request, username): 
    profile_info = User.objects.filter(name=username) 
0

당신은 여전히 ​​원한다면 두 테이블을 '연결'하십시오. models.py에서 나는 쓸 것이다 : 이것은 당신의 DB에서 두 테이블 Userreview이 외래 키 (한 사용자 (ID)를 통해 사용자에 연결 (사용자 및 UserReview)이 생성됩니다

from django import models 

    class User(models.Modle): 
     name = models.CharField(max_length=30) 
     #add more fields here 

    class UserReview(models.Model): 
     user_id = models.ForeignKey(User) 
     #add more fields here 

-> 많은 리뷰 (user_id1을 user_id1, user_id2 등)). 기본적으로이 외래 키는 User 테이블의 자동 생성 된 ID 필드입니다 (기본적으로이 예에서는 기본 키인 ID 필드가 별도로 지정되지 않는 한 각 테이블에 대해 자동 생성됩니다).

도움이 되었기를 바랍니다.

관련 문제