2017-11-08 6 views
3

비교적 새로운 django입니다.이 문제를 검색했지만 해결책을 찾지 못했습니다. 해결책이 분명하다면 용서해주세요.하지만 저는 그것을 올바르게 이해할 수 없습니다.장고 템플릿에서 외래 키 객체와 함께 get_absolute_url()을 사용하는 방법

그래서 이것은 문제입니다. 두 모델이 있습니다 교구인커뮤니티. 교구민은 커뮤니티와 다 대일 관계를 맺고 있습니다. parishioner_detail 페이지에서 community_detail 페이지에 대한 링크로 커뮤니티 이름을 표시하려고합니다. get_absolute_url() 메서드를 올바르게 사용하지 않는 것 같습니다. 어떤 도움을 주시면 감사하겠습니다.

모델 :

from django.db import models 
from django.core.urlresolvers import reverse 

class Community(models.Model): 
    name = models.CharField(max_length=41) 
    description = models.TextField() 
    leader = models.CharField(max_length=41) 
    email = models.EmailField() 
    phone_number = models.CharField(max_length=20) 
    slug = models.SlugField(max_length=31, unique=True) 

    def __str__(self): 
     return self.name 

    def get_absolute_url(self): 
     return reverse('people_community_detail', kwargs={'slug': self.slug}) 

class Parishioner(models.Model): 
    name = models.CharField(max_length=41) 
    date_of_birth = models.DateField('date of birth', blank=True) 
    email = models.EmailField() 
    phone_number = models.CharField(max_length=20) 
    start_date = models.DateField('date posted') 
    societies = models.ManyToManyField(Society, blank=True, related_name='parishoners') 
    communities = models.ForeignKey(Community, blank=True, related_name='parishoners') 
    sacraments = models.ManyToManyField(Sacrament, blank=True, related_name='parishoners') 
    slug = models.SlugField(max_length=31, unique=True) 

    def __str__(self): 
     return self.name 

    def get_absolute_url(self): 
     return reverse('people_parishioner_detail', kwargs={'slug': self.slug}) 

    class meta: 
     ordering = ['name'] 
     verbose_name_plural = "parishioners" 

조회수 :

from django.shortcuts import get_object_or_404, render, redirect 
from .models import Society, Community, Sacrament, Festival, Parishioner 

def community_list(request): 
    return render(request, 'people/community_list.html', {'community_list': Community.objects.all()}) 

def community_detail(request, slug): 
    community = get_object_or_404(Community, slug__iexact=slug) 
    return render(request, 'people/community_detail.html', {'community': community}) 

def parishioner_list(request): 
    return render(request, 'people/parishioner_list.html', {'parishioner_list': Parishioner.objects.all()}) 

def parishioner_detail(request, slug): 
    parishioner = get_object_or_404(Parishioner, slug__iexact=slug) 
    return render(request, 'people/parishioner_detail.html', {'parishioner': parishioner}) 

parishioner_detail.html :

<dt>Community</dt> 
    <dd><a href="{{ community.get_absolute_url }}">{{ parishioner.communities|title }}</a></dd> 
<dt>Societies</dt> 
    {% for society in parishioner.societies.all %} 
    <dd><a href="{{ society.get_absolute_url }}">{{ society.name|title }}</a></dd> 
    {% endfor %} 

parishioner_detail에 society_detail 페이지를 올바르게 사회에 이름 링크하지만 커뮤니티 이름 링크 community_detail 페이지 대신 기본적으로 페이지를 다시로드합니다.

도움을 주시면 감사하겠습니다. 감사합니다. .

답변

3

community 이름이 컨텍스트에 존재하지 않으므로 href 링크가 비어있어 동일한 페이지로 리디렉션됩니다.

당신은 아마 일을해야한다 :

<dt>Community</dt> 
<dd><a href="{{ parishioner.communities.get_absolute_url }}">{{ parishioner.communities|title }}</a></dd> 

더 나은 단수 위해 communities 필드를 변경하는 (즉, community) 덜 혼란 때문에이 외래 키 필드, 이후; 한 교구에 한 명의 교구민 (여러 지역 사회가 아님).

+0

모세에게 감사드립니다. 그것은 매력처럼 작동했습니다. 또한 커뮤니티를 커뮤니티로 변경했습니다. –