django - Django 3:将数据添加到 DetailView
问题描述
我对这个和这个有一个非常相似的问题,我的猜测是我忽略了一些东西。
我想从模板中的模型中查询相关对象(外键):
模型.py:
class PartBase(models.Model):
name = models.CharField('Name', max_length=120)
price = models.DecimalField("Price per part", decimal_places=2, max_digits=6)
class Sett(models.Model):
name = models.CharField('Name', max_length=120)
class PartRelation(models.Model):
part = models.ForeignKey(PartBase, on_delete=models.CASCADE)
qty = models.PositiveIntegerField("Quantity")
sett = models.ForeignKey(Sett, related_name='setts', on_delete=models.SET_NULL, null=True)
视图.py:
class SetDetailView(DetailView):
model = Sett
context_object_name = "setts"
模板:
{% for p in setts.partrelation_set.all %}
<p>value: {{ p.get_part_price }}</p>
{% endfor %}
问题:空 HTML 页面 - 所以 setts.partrelation_set.all 为空/不存在。
我尝试的是向视图类添加一个查询集:
class SetDetailView(DetailView):
model = Sett
context_object_name = "setts"
queryset = Sett.objects.all()
def get_queryset(self):
return self.queryset.filter(setts = self.kwargs.get("Sett_id"))
但我在某个地方走错了方向。我还尝试在模型中添加很多返回属性方法,这样我就可以让它在 shell 中工作——但不能在 DetailView 中工作。
解决方案
你必须用来related_name
调用子对象
{% for p in setts.setts.all %}
<p>value: {{ p.get_part_price }}</p>
{% endfor %}
编辑
最好删除上下文对象名称并调用
{% for p in object.setts.all %}
<p>value: {{ p.get_part_price }}</p>
{% endfor %}
推荐阅读
- javascript - 仅从对象数组 gcloud 数据存储中获取选定对象
- android - onScroll RecyclerView Adapter 中的定时器值变化
- .net - 如何以在 .NET 中发布 Web 应用程序的方式发布 Windows 应用程序?
- python - 带有正则表达式的 p4 文件日志
- android - 使用 NDK 为 Android 构建 capicxx-someip-runtime
- javascript - 本机 Javascript - 如果语句不起作用,则具有 else 属性
- ios - 如何使用“使用应用程序时”定位服务获取地理通知
- latex - 用于 LaTeX 的 pgf tikz 如何将 x 和 y 坐标与节点一起使用
- java - 在 Java 中分配给字符串缓冲区的内存没有被清除
- java - 将字符连接到字符串数组时获取“null”