Python 从django中的外键引用模型访问外键值

Python 从django中的外键引用模型访问外键值,python,django,django-models,django-views,Python,Django,Django Models,Django Views,模型 这是Views.py 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):

模型

这是Views.py

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
我的模板:

def search(request):
        result_list = Ride.objects.all()    
        return render_to_response('rides/search.html', {'result_list':result_list}, context )
{%for result in result\ u list%}
  • {%if结果%} {{result.ride_comment} {%endif%}
  • {%endfor%}
    我想在模板中显示用户详细信息,即相关骑乘id的驾驶员模型中的用户id和用户名。我不知道如何获取此信息


    您设计的方式无法直接访问它。作为一对多的关系

    尽管您可以循环使用
    result.driver\u set.all
    ,这将允许您访问驱动程序对象访问权限,并且您可以获取用户id访问权限

    {% 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 %}
    
    {%for result in result\ u list%}
    
  • {%if结果%} {{result.ride_comment} {result.driver_set.all%中的项的% {{item.user_id} {%endfor%} {%endif%}
  • {%endfor%}
    驾驶员实际上是骑乘设施和用户之间多对多关系的直通表。您应该通过声明一个ManyToManyField on Ride来明确这一点:

    {% 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 %}
    
    现在,您可以在模板中更直接地访问该关系:

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

    尽管我要重复其他评论所说的话:你们的关系似乎有点倒退,一辆车应该只有一个司机。

    按照你们设计模型的方式,你的车和司机之间有一对多的关系。这是一次骑行,你有很多司机。这就是你想要的吗?一辆车怎么可能有很多司机?您的关系顺序颠倒了。您好,我已尝试了上述代码,我可以使用此“item.User\u id”获取用户对象的用户名。但我如何访问其他用户属性,如电子邮件。我尝试过类似“item.user\u id.email”,但这不起作用我得到了:)item.user\u id.email给出了电子邮件,之前我在email字段中没有任何值,所以我得到了空值,认为代码不起作用。谢谢
    {% for result in result_list %}
      ...
      {% for user in result.users.all %}
        {{ user.username }}
      {% endif %}