模型
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和来自相关ride_id的Driver模型的用户名。我不知道怎么做到这个!
答案 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 %}
答案 1 :(得分:0)
驱动程序实际上是Ride和User之间多对多关系的直通表。你应该通过在Ride上声明一个ManyToManyField来明确这一点:
users = models.ManyToManyField(User, through=Driver)
现在,您可以更直接地在模板中访问该关系:
{% for result in result_list %}
...
{% for user in result.users.all %}
{{ user.username }}
{% endif %}
虽然我会重复其他评论所说的内容:你的关系似乎是倒退的,因为肯定只有一个司机。