2017-11-24 4 views
2

코딩에 새롭다. Django의 문서, YouTube, Google에서 지난 몇 저녁을 보내고 여기에서 모든 문제를 해결하기 위해 노력했습니다.Django 외래 키 렌더링되지 않음 관련 모델 데이터 템플릿 있음

나는 드라이버와 관련된 모델 경로를 가지고 있으며 해당 경로와 관련된 모든 드라이버를 내 템플릿에 표시하려고합니다. 그러나 현재 내가 얻을 수있는 것은 연결된 드라이버가 아닌 Route 모델의 데이터입니다.

나는 그것에 대해 내 머리를 얻으려고 고군분투하고있어 어떤 도움을 주셔서 감사합니다!

Models.py

class Driver(models.Model): 
    user = models.ForeignKey(settings.AUTH_USER_MODEL, default=1) 
    first_name = models.CharField(max_length=120, blank=True, null=True) 
    last_name = models.CharField(max_length=120, blank=True, null=True) 
    tel = models.CharField(max_length=120, blank=True, null=True) 
    slug = models.SlugField(max_length=120, unique=True) 
    timestamp = models.DateTimeField(auto_now_add=True, auto_now=False) 
    updated = models.DateTimeField(auto_now_add=False, auto_now=True) 

    def __str__(self): 
     return self.first_name 

    def save(self, *args, **kwargs): 
     self.slug = slugify(self.first_name) 
     super(Driver, self).save(*args, **kwargs) 

class Route(models.Model): 
    leave_from = models.CharField(max_length=120, blank=True, null=True) 
    destination = models.CharField(max_length=120, blank=True, null=True) 
    date = models.DateField(auto_now_add=False, auto_now=False) 
    time = models.TimeField(auto_now_add=False, auto_now=False) 
    drivers = models.ForeignKey(Driver, on_delete=models.CASCADE) 

    def __str__(self): 
     return self.leave_from 

Views.py

def drivers(request): 
    qs = Route.objects.all().select_related() 
    context = { 
     "qs": qs, 
     } 
    return render(request, 'drivers.html', context) 

템플릿

내가 .prefetch_related 시도
{% for instance in qs %} 
    <p>{{ instance.user }} <br> {{ instance.first_name }} {{ instance.last_name }} {{ instance.tel }} {{ instance.destination }} </p> 

    <iframe width="600" height="450" frameborder="0" style="border:0" src="https://www.google.com/maps/embed/v1/directions?origin={{ instance.leave_from }} 
    &destination={{ instance.destination }} 
    &key=AIzaSyAyuIOgVteQ0NLxCCTz4axRmta_JL3OVL4"> 
    </iframe> 
{% endfor %} 

('드라이버')과 몇 가지 다른 조합하지만 중 경로 데이터 또는 오류 만받습니다.

미리 감사드립니다.

면책 조항 나는 이틀 전에 템플릿을 사용하지 않고 물어 보았고 내가 편집 한 후에 더 이상의 대답을 얻지 못했습니다. 저는 벽돌 벽에 있습니다. 나는 잘못 갔다. 여기

답변

0

:

{% for instance in qs %} 
    <p>{{ instance.user }} <br> {{ instance.first_name }} {{ instance.last_name }} {# etC#} 

instanceRoute 개체입니다, 당신이 찾고있는 속성은 Driver 객체에 속한다. 당신이 원하는 :

{% for route in qs %} 
    {% with driver=route.drivers %} {# XXX should be named 'driver' #} 
    <p>{{ driver.user }} <br> {{ driver.first_name }} {{ driver.last_name }} 
{# etC#} 

우리가 그것에 인 동안 : Route.drivers 정말 Route.driver (이 외부 키가 아닌 many2many, 그래서 당신이 경로 당 하나의 드라이버를 가지고, 그래서 당신은 단수를하지 찾는로 변경해야 컬렉션을 나타내는 복수형) 여기에 .select_related("driver", "driver__user")을 사용해야합니다 (select_related 또는 prefetch_related을 사용하는 경우는 What's the difference between select_related and prefetch_related in Django ORM?을 참조하십시오).

또한 User에 이미있는 Driver 모델에 first_namelast_name을 복제해야하는 이유가 있습니까? 오 ~ 예, Route에 날짜 필드에 auto_now_add=Falseauto_now=False을 추가하면 기본 설정이므로 쓸모가 없습니다.

+0

놀라운 감사합니다! 코드에 대한 포인터 주셔서 감사합니다, 많이 주셔서 감사합니다 :) –