我知道很多次都会问这个问题,但我仍然无法解决。
model.py
class Awb (models.Model):
awb_id = models.CharField(primary_key=True, max_length=50)
awb_shipment_date = models.DateTimeField()
awb_shipper = models.CharField(max_length=250)
awb_sender_contact = models.CharField(max_length= 50)
class History (models.Model):
history_id = models.AutoField(primary_key=True)
awb = models.ForeignKey(Awb)
history_city_hub = models.CharField(max_length=250)
history_name_receiver = models.CharField(max_length=250)
view.py
def awb_list_view(request):
data = {}
data['awb'] = Awb.objects.all()
data['history'] = History.objects.all()
return render(request, 'portal/awb-list.html', data)
模板
{% for s in awb.history_set.all %}
{{ s.awb_id }}
{{ s.history_id }}
{% endfor %}
当我尝试使用此代码时,模板中没有结果。我想在模板中显示awb_id和history_id。你能帮帮我吗?
答案 0 :(得分:0)
首先让我们看一下视图代码......
def awb_list_view(request):
data = {}
data['awb'] = Awb.objects.all()
data['history'] = History.objects.all()
return render(request, 'portal/awb-list.html', data)
传递给模板的上下文字典包含一个带有键&aw;'的项目。和各自的QuerySet Awb.objects.all()
。
现在让我们看看模板for loop ...
{% for s in awb.history_set.all %}
此循环模板标记的开头正在尝试生成一组反向历史对象。为了实现这一点,我们需要一个AWB对象实例。相反,' awb' variable是一个QuerySet,它作为上下文传递给模板。
如果此代码的目标是显示所有AWB对象及其相关的History对象,则以下模板代码应该有效。
{% for awb_obj in awb %}
{% for history_obj in awb_obj.history_set.all %}
{{ awb_obj.id }}
{{ history_obj.id }}
{% endfor %}
{% endfor %}
答案 1 :(得分:0)
Awb.history_set.all仅适用于一个Awb对象,而不适用于查询集。
这样可行:
data['awb'] = Awb.objects.first() # If the first one has history
或:
遍历模板中的所有Awb对象,以访问每个对象的history_set。
{% for a in awb %}
awb: {{ a.awb_id }}<br>
{% for h in a.history_set.all %}
history: {{ h.history_id }}<br>
{% endfor %}
{% endfor %}