Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 打一个「;“矩阵”;来自Django查询_Python_Django - Fatal编程技术网

Python 打一个「;“矩阵”;来自Django查询

Python 打一个「;“矩阵”;来自Django查询,python,django,Python,Django,我有一个类似的模型: class MyModel(models.Model): name = models.CharField(max_length = 30) a = models.ForeignKey(External) b = models.ForeignKey(External, related_name='MyModels_a') def __unicode__(self): return self.a + self.b.n

我有一个类似的模型:

class MyModel(models.Model):
    name = models.CharField(max_length = 30)
    a    = models.ForeignKey(External)
    b    = models.ForeignKey(External, related_name='MyModels_a')

    def __unicode__(self):
        return self.a + self.b.name + self.b.name
所以当我查询它时,我得到如下结果:

>>> MyModel.objects.all()
[<MyModel: Name1AB>,<MyModel: Name2AC>,<MyModel: Name3CB>,<MyModel: Name4BA>,<MyModel: Name5BA>]
mymodel_list  = MyModel.objects.all()
external_list = External.objects.all()

for i in external_list:
    for j in external_list:

        print(mymodel_list.filter(a=i).filter(arrl=j).all(),end='')
        print()
如您所见,模型中的行将是“a”;列将是“b” 我可以这样做,但这需要很长时间,因为在真实的数据库中,我有很多数据。我想知道是否有一个Django内置的方式来做这件事

我是这样做的:

>>> MyModel.objects.all()
[<MyModel: Name1AB>,<MyModel: Name2AC>,<MyModel: Name3CB>,<MyModel: Name4BA>,<MyModel: Name5BA>]
mymodel_list  = MyModel.objects.all()
external_list = External.objects.all()

for i in external_list:
    for j in external_list:

        print(mymodel_list.filter(a=i).filter(arrl=j).all(),end='')
        print()

谢谢

没有内置的方式(因为你需要的不是普通的)。您应该手动编写它,但我建议检索完整的数据集(或至少一个表行的数据集)并用Python处理它,而不是在每个表单元格中点击DB。

没有内置方式(因为您需要的不是通用的)。您应该手动编写它,但我建议检索完整的数据集(或至少一个表行的数据集)并用Python处理它,而不是在每个表单元格中点击DB。

有三种方法,但您需要研究更多。第三种选择可能是最适合你所寻找的

1) Django查询

花费很长时间的原因是您经常在这一行中访问数据库:

print(mymodel_list.filter(a=i).filter(arrl=j).all(),end='')
您可能需要开始阅读Django文档中的内容。对于您正在做的事情,您必须创建算法以避免过滤器。使用MyModel.objects.order_by('a')可以帮助您构建高效的算法

2) {%ifchanged…%}标记

我想你正在使用打印来发布你的答案,但你可能需要它在html中。在这种情况下,您可能需要阅读有关标记的信息。它将允许您只需一次db访问就可以用html构建矩阵

3) 多对多关系

你似乎在以一种非常奇特的方式模拟一种多对多的关系。Django支持这项计划。您将需要一个额外的字段,因此您还必须阅读


最后,对于仅通过一次访问数据库来完成您正在尝试的操作,您需要阅读三种方法,但您需要进行更多的研究。第三种选择可能是最适合你所寻找的

1) Django查询

花费很长时间的原因是您经常在这一行中访问数据库:

print(mymodel_list.filter(a=i).filter(arrl=j).all(),end='')
您可能需要开始阅读Django文档中的内容。对于您正在做的事情,您必须创建算法以避免过滤器。使用MyModel.objects.order_by('a')可以帮助您构建高效的算法

2) {%ifchanged…%}标记

我想你正在使用打印来发布你的答案,但你可能需要它在html中。在这种情况下,您可能需要阅读有关标记的信息。它将允许您只需一次db访问就可以用html构建矩阵

3) 多对多关系

你似乎在以一种非常奇特的方式模拟一种多对多的关系。Django支持这项计划。您将需要一个额外的字段,因此您还必须阅读


最后,对于只需访问数据库一次就可以完成的操作,您需要阅读

我将检查文档中的过滤器。我使用print是因为我正在测试一个脚本(我们还远没有开始制作视图),而且它不是很多人都喜欢的,因为在“external”中我不能有副本;然而,我对“a”和“b”之间的关系感兴趣,因为ab不同于ba。但是这些都是很好的想法,我想我可以再次开始这方面的工作了,谢谢。我会检查过滤器的文档。我使用print是因为我正在测试一个脚本(我们还远没有开始制作视图),而且它不是很多人都喜欢的,因为在“external”中我不能有副本;然而,我对“a”和“b”之间的关系感兴趣,因为ab不同于ba。但这些都是好主意,我想我可以重新开始工作了,谢谢