2014-01-18 5 views
0

МоделиДоступ значения внешнего ключа от внешнего ключа ссылочной модели в Джанго

class Ride(models.Model): 
    type = models.BooleanField(default=False) 
    ride_comment = models.TextField(null=True,max_length=140,blank=True) 
    def __unicode__(self): 
     return self.ride_comment 

class Driver(models.Model): 
    ride_id = models.ForeignKey(Ride) 
    user_id = models.ForeignKey(User) 
    drv_carseats = models.SmallIntegerField(null=True,blank=False) 
    def __unicode__(self): 
     return self.user_id.username 

Вот в views.py

def search(request): 
     result_list = Ride.objects.all()  
     return render_to_response('rides/search.html', {'result_list':result_list}, context) 

Моего Шаблон:

{% for result in result_list %} 
      <li> 
      {% if result %} 
       <a href="/rides/ridedetails/{{ result.pk }}">{{ result.type }}</a> 
       <em>{{ result.ride_comment }}</em> 
      {% endif %} 
      </li> 
     {% endfor %} 

Я хочу показывать данные пользователя в шаблоне, то есть user_id и имя пользователя из режима драйвера l этой связанной поездки. Я понятия не имею, как это получить!

+0

Как вы разработали свои модели, у вас есть отношения «один ко многим» между Ride и Driver. То есть для одного Ride у вас много водителей. Это то, что вы намеревались? –

+0

Как можно ездить на многих водителей? Ваша последовательность отношений инвертирована. –

ответ

1

То, как вы разработали, нет прямого доступа к нему. Как однотипное отношение.

хотя вы можете зациклиться на result.driver_set.all, и это даст вам доступ к доступу к объекту драйвера, и вы можете получить доступ user_id.

{% for result in result_list %} 
      <li> 
      {% if result %} 
       <a href="/rides/ridedetails/{{ result.pk }}">{{ result.type }}</a> 
       <em>{{ result.ride_comment }}</em> 
       {% for item in result.driver_set.all %} 
        {{item.user_id}} 
       {% endfor %} 
      {% endif %} 
      </li> 
     {% endfor %} 
+0

Привет, я пробовал приведенный выше код, я могу получить имя пользователя объекта User, используя этот «item.user_id». Но как я могу получить доступ к другим атрибутам пользователя, таким как электронная почта. Я пробовал как «item.user_id.email», но это не работает – user4k

+0

Я получил его :) item.user_id.email дает электронное письмо. Раньше у меня не было значения в поле электронной почты, поэтому я получил пустое место и думал, что код не работает. благодаря – user4k

0

Водитель фактически является сквозной таблицей отношений «многие ко многим» между Ride и User. Вы должны сделать это явно, объявляя ManyToManyField на Райд:

users = models.ManyToManyField(User, through=Driver) 

Теперь вы можете получить доступ, что отношения более непосредственно в шаблоне:

{% for result in result_list %} 
    ... 
    {% for user in result.users.all %} 
    {{ user.username }} 
    {% endif %} 

Хотя я бы повторить то, что другие комментарии, сказал: ваши отношения кажутся обратными, в том, что, безусловно, поездка должна иметь только один водитель.

Смежные вопросы