0

我尝试用这段代码查询 Db:

Makesite.objects.values_list('ref_id', flat =True)

它返回 [1,2,None]。我发现这有点令人困惑。我假设 python 用它们自己的名字而不是它只是分配给它们的数字来保存实例。任何有关代码的帮助或解释为什么 python 将它们保存为数字而不是它们的名称都会非常感谢。

在模型.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)
4

1 回答 1

1

Django 不会通过它们的“名称”来保存 m2m。它使用它们的主键(在你的情况下 - 整数)。您可以通过查看数据库表来检查它。

makesite.sitename当您只使用Django 之类的东西时,会进行另一个查询来获取站点名称实例。

但是当您使用时,values_list您不需要额外的查询或连接,这就是 Django从单个表返回数据的原因。它所能得到的一切都是一个主键。

如果您想优化相关查询,请查看select_related / prefetch_related方法或使用缓存。

于 2012-05-11T08:01:42.083 回答