2014-01-18 71 views
0

模型從外鍵參考模型在Django訪問外鍵值

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 %} 

我想在模板中顯示用戶詳細信息,例如來自Driver模式的user_id和username l關聯的ride_id。我不知道如何得到這個!

+0

您設計模型的方式在駕乘和駕駛之間有一對多的關係。這是一個單騎你有很多司機。這是你的意圖嗎? –

+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

嗨我已經嘗試了上面的代碼,我可以使用這個'item.user_id'獲取用戶對象的用戶名。但是,我如何訪問其他用戶屬性,如電子郵件。我已經嘗試像'item.user_id.email',但那是行不通的 – user4k

+0

我知道了:) item.user_id.email給出了電子郵件,早些時候我沒有任何價值的電子郵件字段,所以我得到空,並認爲代碼不起作用。謝謝 – user4k

0

驅動程序實際上是騎乘和用戶之間的多對多關係的通過表。你應該做的是明確的,通過聲明對騎ManyToManyField:

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

現在,您可以更直接訪問模板關係:

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

雖然我重複其他評論說:你們的關係似乎倒退了,因爲一定要乘坐一個司機。