Django - 在数据库级别初始化多对多字段

Django - initialize many to many fields on database level

开始的示例代码:

In my model:
class X(models.Model):
    someField = models.ManyToManyField(Many_values, related_name='someField')
    ......

In my controller (which is a controller, not a view, get over it, Django!)
    xes = X.objects.filter(iscool=True)   [1]
    .......
    some_function_call(xes)

In some function:
    for x in xes:
        some_table.append(x.someField.first()) [2]

现在,有什么方法可以强制执行 django,在 [1] 时刻获取那些 someField 值(或至少是第一个)?

现在,我将这些值存储在 [2] 的 table 中,其中:

  1. 每次调用select都会导致即时数据库
  2. 似乎每次我调用 first() 函数时都会引起它们
  3. 效率低下,因为如果与 [1] 数据库连接会更快 select
  4. 迫使我将那些 first() 值存储在单独的 table 中,我必须记住
  5. 提醒我,我无法正确格式化我的 Whosebug post,因此此列表很可能会显示为纯文本

简而言之,我想要实现的是:
每当我打电话给

x.someField.first()

我不希望它在数据库中查找它。

这是一种观点。 Django 显然不是 MVC。

但是,是的,有一个有据可查的 prefetch_related method:

xes = X.objects.filter(iscool=True).prefetch_related('someField')