我想将nome
上pavimento
的{{1}}的PDF渲染为PDF,我真的不知道该怎么做。
我的模型
AvariaAdmin
class Avaria(models.Model):
freguesia = models.ForeignKey(Freguesia, on_delete=models.CASCADE,verbose_name="Freguesia")
rua = models.ForeignKey(Rua, on_delete=models.CASCADE,verbose_name="Rua")
porta = models.PositiveIntegerField(verbose_name="Numero de polícia")
tipo_avaria = models.ForeignKey(Tipo_avaria, on_delete=models.CASCADE,verbose_name="Tipos de avaria")
class Pavimentacao(models.Model):
avaria = models.ForeignKey(Avaria, related_name='AvariaObjects',on_delete=models.CASCADE)
pavimento = models.ForeignKey(Pavimento, on_delete=models.CASCADE, verbose_name="Pavimento")
我的DEF(在AvariaAdmin内部)
class Pavimento(models.Model):
nome = models.CharField("Pavimento",max_length=200)
我的HTML
def Imprimir(self, request, obj):
data = {
'obj':obj
}
pdf = render_to_pdf('daa/imprimir/avarias_pdf.html', data)
if pdf :
response = HttpResponse(pdf, content_type='application/pdf')
filename ="Avaria_%s.pdf" %("123451231")
content = "inline; filename='%s'" %(filename)
response['Content-Disposition'] = content
download = request.GET.get("download")
if download:
content = "attachment; filename='%s'" %(filename)
response['Content-Disposition'] = content
return response
return HttpResponse("Not found")
答案 0 :(得分:1)
首先,如果类Pavimentacao
仅包含其中的所有类,则无需这样做(但也许您没有向我们展示所有模型)。它只是在Avaria
和Pavimento
之间保持多对多关系,您应该直接使用models.ManyToManyField
进行建模:
class Avaria(Model):
...
pavimentos = models.ManyToManyField(Pavimento)
然后,如果要打印所有Pavimento
实例,则在模板中:
<tr>
...
<td>
{% for pavimento in item.pavimentos.all %}
{{ pavimento.nome }}<br>
{% endfor %}
</td>
</tr>
但是,如果您保持模型不变,则模板代码将为:
<tr>
...
<td>
{% for pavimentacao in item.AvariaObjects.all %} <!-- this is because of the related_name you defined -->
{{ pavimentacao.pavimento.nome }}<br>
{% endfor %}
</td>
</tr>
看看您给的related_name
是怎么错的? related_name
用于反向关系,因此它应该是您正在定义的模型的名称,而不是您所引用的模型。阅读docs了解反向关系。