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
相关产品推荐
相关产品推荐

