2010-04-02 5 views
2

나는 이것이 쉬운 질문이라고 생각합니다. 웬일인지, 나는 아직 해결책이 없다.django 템플릿의 사용자 ID를 참조하여 사용자 이름을 표시하십시오.

나는 django reversion : version_list에서 객체를 설정했습니다. 세트의 각 오브젝트에는 사용자 ID가 첨부됩니다. 사용자 ID에 해당하는 사용자 이름을 얻으려면 어떻게해야합니까?

version_list의 각 객체에 이름, 날짜 및 사용자 ID가있는 경우 사용자 테이블과 함께 version_list 세트를 결합하여 어떤 사용자 ID가 어떤 이름으로 연결되는지 파악할 수 있습니까? 이것은 뷰 또는 템플릿에서 수행됩니까?

답변

9

나는 간단한 템플릿 태그를 찾고 있다고 생각합니다.

from django import template 
from django.contrib.auth.models import User 

register = template.Library() 

@register.simple_tag 
def get_username_from_userid(user_id): 
    try: 
     return User.objects.get(id=user_id).username 
    except User.DoesNotExist: 
     return 'Unknown' 

처럼 사용하는 것이다 : 나는 객체가 사용자 속성을 가지고 있다고 생각하지 않습니다

{% for version in version_list %} 
    {% get_username_from_userid version.user_id %} 
{% endfor %} 
0

버전 개체에 사용자 속성 (예 : ForeignKey)이 있거나 정수 필드입니까?

from django.contrib.auth.models import User 

def related_user(self): 
    try: 
     return User.objects.get(pk=self.user_id) 
    except User.DoesNotExist: 
     return None 
처럼

{% for v in version_list %} 
{{ v.user.get_full_name }} 
{% endfor %} 

그렇지 않으면 당신은 관련 사용자를 보이는 버전의 객체에 함수/속성을 추가 할 필요가 있기 위하여려고하고있다 : 그것은 사용자 외래 키가 있다면, 당신은 말할 수 있어야한다 템플릿에서

그리고이 레거시 호환성의 일종입니다하지 않는 한

{% for v in version_list %} 
{{ v.related_user.get_full_name }} 
{% endfor %} 
+0

. user_id의 정수 필드. 나는 버전 모델에 어떤 함수도 추가하는 것을 피하고자한다. 나는 그것을 함께 묶지 않고 조회를하는 방법이 있어야한다고 생각한다. 예를 들어 장고 관리자를 사용하면 해당 인터페이스를 통해 편집 한 사용자 및 시간을 볼 수 있습니다. Reversion 앱은 관리자에게 연결되어 해당 인터페이스 외부에서 이루어진 편집 내용도 시간과 사용자 이름으로 나열됩니다. user_ids가 version_list 세트의 id와 동일한 user_list 세트를 채우는 것과 같은 작업을 수행 할 수 있습니까? –

1

, 당신은 정말 ForeignKey(User)를 사용하도록 스키마를 변경해야합니다. 데이터는이 열의 동일해야합니다, 그래서 당신은 이미 물건을 많이 가지고 있다면 당신은

user = models.ForeignKey(User) 

에 모델 필드를 업데이트 데이터베이스에 잃고 싶지 않아 그리고 당신도 할 필요가 없습니다 필드가 이미 user_id이라면 테이블을 변경하십시오.

사용자 이름을 얻는 데는 항상 템플릿 수준에서이 완료되었지만 전체 이름 (Casey Stark) 또는 사용자 이름 (caseywstark)을 원하는지 여부에 따라 다릅니다.

사용자 이름을 표시하려면 {{ user }}을 사용하고, 이름을 표시하려면 {{ user.get_full_name }}을 사용하십시오. 두 번째 메서드는 템플릿 내에서 User 객체의 get_full_name 함수를 호출합니다. 이 경우 빈 문자열을 반환하지 않으려면 user.first_name 및 user.last_name을 설정해야합니다.

{% for version in version_list %} 
    {{ version.user }} wrote version {{ version }} 
{% endfor %} 
+0

이것은 작동 할 수 있습니다. 하지만 현재 상태에서 모델을 변경하고 싶지 않습니다. –

+0

* 정말로 * 모델을 변경할 수 없으면 템플릿 태그가 templatetag 일 것입니다. 그러나 다른 모든 Django 코드는 ForeignKey (User)를 사용하는 것을 기반으로하므로이 문제를 다루는 것이 좋습니다.예를 들어, Django-flag는 플래그를 지정하려는 모든 객체에 ForiegnKey (User)가 있다고 가정합니다. 쉬운 수정을 사용하면 나중에 더 많은 두통이 생길 것입니다. –

관련 문제