簡體   English   中英

從Django中的外鍵引用模型訪問外鍵值

[英]Accessing Foreign Key values from a foreign key referenced model in 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 %}

我想在模板中顯示用戶詳細信息,即該關聯ride_id的驅動程序模型中的user_id和用戶名。 我不知道如何得到這個!

您設計的方式無法直接訪問它。 作為它的一對多關系。

盡管您可以循環運行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 %}

驅動程序實際上是Ride和User之間的多對多關系的穿透表。 您應該通過在Ride上聲明ManyToManyField來使之明確:

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

現在,您可以在模板中更直接地訪問該關系:

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

盡管我會重復其他評論所說的話:您的關系似乎倒退了,但肯定是一次乘車應該只有一個駕駛員。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM