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 中,其中:
- 每次调用select都会导致即时数据库
- 似乎每次我调用 first() 函数时都会引起它们
- 效率低下,因为如果与 [1] 数据库连接会更快 select
- 迫使我将那些 first() 值存储在单独的 table 中,我必须记住
- 提醒我,我无法正确格式化我的 Whosebug post,因此此列表很可能会显示为纯文本
简而言之,我想要实现的是:
每当我打电话给
x.someField.first()
我不希望它在数据库中查找它。
这是一种观点。 Django 显然不是 MVC。
但是,是的,有一个有据可查的 prefetch_related
method:
xes = X.objects.filter(iscool=True).prefetch_related('someField')
开始的示例代码:
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 中,其中:
- 每次调用select都会导致即时数据库
- 似乎每次我调用 first() 函数时都会引起它们
- 效率低下,因为如果与 [1] 数据库连接会更快 select
- 迫使我将那些 first() 值存储在单独的 table 中,我必须记住
- 提醒我,我无法正确格式化我的 Whosebug post,因此此列表很可能会显示为纯文本
简而言之,我想要实现的是:
每当我打电话给
x.someField.first()
我不希望它在数据库中查找它。
这是一种观点。 Django 显然不是 MVC。
但是,是的,有一个有据可查的 prefetch_related
method:
xes = X.objects.filter(iscool=True).prefetch_related('someField')