如果我有3张桌子:House>父母>儿童。我如何打印关于父母的数据,他们住在哪个房子以及他们有什么孩子。
view.py
def some_view(request):
response = HttpResponse(content_type='application/pdf')
response['Content-Disposition'] = 'attachment; filename="somefilename.pdf"'
p = canvas.Canvas(response)
p.drawString(100, 100, "Hello World.")
p.showPage()
p.save()
return response
models.py
class House(request):
address = models.CharField()
class Parent(request):
name = models.CharField()
house = models.ForeignKey(House, related_name='parents')
class Child(request):
name = models.CharField()
parent = models.ForeignKey(Parent, related_name='children')
抱歉这么广泛的问题。我只是不知道是不是要开始和努力学习文档
答案 0 :(得分:1)
这是一个建议你如何解决这个问题,首先是一些代码,然后是一些解释:
HOUSE_X = ...
PARENT_X = ...
CHILD_X = ...
START_Y = ...
SEP_Y = ...
y = START_Y;
houses = House.objects.all()
for house in houses:
p.drawString(HOUSE_X, y, house.address);
y += SEP_Y
parents = Parent.objects.filter(house=house)
for parent in parents:
p.drawString(PARENT_X, y, parent.name);
y += SEP_Y
children = Child.objects.filter(parent=parent)
for child in children:
p.drawString(CHILD_X, y, child.name);
y += SEP_Y
好的,首先,顶部的魔术值定义了每个模型的x位置,我的建议是HOUSE_X < PARENT_X < CHILD_X
得到一个标识,但它取决于你。接下来,START_Y
是我们从y开始的地方,SEP_Y
是每个绘制字符串将增加的行高,每次调用{{1}后,您会看到y
增加}。
现在我只是浏览所有模型,获取相关对象并使用我的魔术值打印它们,并在每一步增加drawString
。
希望这会给你一个开始。从这里你可以决定魔术值并准确决定每行应该打印什么。