django在基础报告中苦苦挣扎

时间:2014-09-16 14:52:32

标签: python django

如果我有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')

抱歉这么广泛的问题。我只是不知道是不是要开始和努力学习文档

1 个答案:

答案 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

希望这会给你一个开始。从这里你可以决定魔术值并准确决定每行应该打印什么。