You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django中如何在模板内打印外键关联的另一张表的数据

第一步:修正模型关联(推荐)

你当前的BargainModel使用IntegerField存储商品ID不是规范的外键关联方式,先修改模型代码:

class BargainModel(models.Model):
    user = models.ForeignKey(settings.AUTH_USER_MODEL,
                         on_delete=models.CASCADE)
    # 替换原有的itemId字段,改为关联Item模型的外键
    item = models.ForeignKey(Item, on_delete=models.CASCADE, related_name="bargain_records")
    bprice = models.FloatField()

修改完成后执行python manage.py makemigrations和python manage.py migrate命令更新数据库结构。


第二步:修改视图注入自定义数据

重写ItemDetailView的get_context_data方法,查询当前登录用户对应商品的砍价价格注入模板上下文:

class ItemDetailView(DetailView):
    model = Item
    template_name = "product.html"

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        # 仅登录用户才查询砍价记录
        if self.request.user.is_authenticated:
            bargain_record = BargainModel.objects.filter(
                user=self.request.user,
                item=self.object
            ).first()
            # 有记录传砍价价格,无记录传空值
            context["user_bprice"] = bargain_record.bprice if bargain_record else None
        return context

如果你不想修改现有BargainModel的字段结构,保留原有itemId字段的话,把上面查询条件里的item=self.object改成itemId=self.object.id即可。


第三步:模板中调用值

在product.html里直接使用{{ user_bprice }}即可,你也可以加判断处理无砍价记录的场景:

{% if user_bprice %}
<span>您的砍价价格:₹ {{ user_bprice }}</span>
{% endif %}

内容的提问来源于stack exchange,提问作者aashish sethi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 21:15:06