Django 3:向 DetailView 添加数据
Django 3: Adding Data to DetailView
我有一个与 this and this 非常相似的问题,我猜我忽略了什么。
我想从模板中的模型中查询相关对象(外键):
models.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)
views.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:
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"))
但是我在这里拐错了弯。
我还尝试在模型中添加很多 return 属性方法,这样我就可以让它在 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 %}
我有一个与 this and this 非常相似的问题,我猜我忽略了什么。
我想从模板中的模型中查询相关对象(外键):
models.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)
views.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:
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"))
但是我在这里拐错了弯。 我还尝试在模型中添加很多 return 属性方法,这样我就可以让它在 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 %}