Django模板中的外键关系

2mbi3lxu  于 2023-08-08  发布在  Go
关注(0)|答案(3)|浏览(88)

我知道这个问题已经被问过很多次了,但我还是不能解决它。

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。你能帮帮我吗?

cig3rfwq

cig3rfwq1#

原始代码:

{% for s in awb.history_set.all %}
    {{ s.awb_id }}
    {{ s.history_id }}
{% endfor %}

字符串
纠错码

{% for awb in awb %}
    AWB ID: {{ awb.awb_id }}
    {% for history in awb.history_set.all %}
        History ID: {{ history.history_id }}
    {% endfor %}
{% endfor %}

9rnv2umw

9rnv2umw2#

首先让我们来看看视图代码。。

def awb_list_view(request):
    data = {}
    data['awb'] = Awb.objects.all()
    data['history'] = History.objects.all()
    return render(request, 'portal/awb-list.html', data)

字符串
传递给模板的上下文字典包含一个键为'awb'的项和相应的QuerySet Awb.objects.all()
现在让我们来看看循环的模板。。

{% for s in awb.history_set.all %}


此循环模板标记的开头正在尝试生成一组反向的历史对象。为了实现这一点,我们需要一个AWB对象示例。相反,'awb'变量是作为上下文传递给模板的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 %}

owfi6suc

owfi6suc3#

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

相关问题