Database 从多对多对象获取所有实例名称?
我尝试使用以下代码查询数据库:Database 从多对多对象获取所有实例名称?,database,django,Database,Django,我尝试使用以下代码查询数据库: Makesite.objects.values_list('ref_id', flat =True) 它返回[1,2,无]。我发现这有点让人困惑。我假设python以实例自己的名称保存实例,而不是仅分配给它们的数字。任何代码方面的帮助或解释python为什么将它们保存为数字而不是名称都将是非常棒的,谢谢 在models.py中 class Makesite(models.Model): sitename = models.CharField(max_le
Makesite.objects.values_list('ref_id', flat =True)
它返回[1,2,无]。我发现这有点让人困惑。我假设python以实例自己的名称保存实例,而不是仅分配给它们的数字。任何代码方面的帮助或解释python为什么将它们保存为数字而不是名称都将是非常棒的,谢谢
在models.py中
class Makesite(models.Model):
sitename = models.CharField(max_length=100, unique = True)
siteinfo = models.ManyToManyField(Siteinfo)
ref_id = models.ManyToManyField(RefID)
report = models.ManyToManyField(Report)
Django不会用他们的“名字”来保存m2m。它使用它们的主键(在您的例子中是整数)。您可以通过查看数据库表来检查它 当您仅仅使用类似于
makesite.sitename的东西时,Django会进行另一个查询以获取sitename实例
但是当您使用values\u list
时,您不需要额外的查询或联接,这就是Django从单个表返回数据的原因。它能从那里得到的只是一个主键
如果要优化相关查询,请查看/方法或使用缓存。Makesite
的外观如何。什么是sitename
field?我在那里扔了一些模型代码,希望这就是你要找的,所以我复制了错误的代码编辑了变量名好的。那么,当我使用这样的代码时,它如何知道要使用哪个实例呢Makesite.objects.get(sitename=site.ref\u id.values\u list('refid',flat=True)
。其中site是实例的名称。@city它首先进行连接,然后返回连接关系的所有refid
。是一个很酷的工具,用于检查Django提出的SQL查询。这会让事情更清楚。好的。有没有办法将这些主键转换为实例名?@cityMakesite.objects.get(sitename=site.ref\u id.all()
已经尝试过了。仅返回=site的值。通过更详细的描述,它重新展示了它所包含的内容。不是它的名字。所以,就像它的所有内容一样,它实现了站点的平等性