【问题标题】:Django - initialize many to many fields on database levelDjango - 在数据库级别初始化多对多字段
【发布时间】:2015-11-08 18:34:27
【问题描述】:

开始的示例代码:

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] 的表中,其中:

  1. 导致每次调用时立即选择数据库
  2. 似乎每次我调用 first() 函数时都会导致它们
  3. 效率低下,因为如果加入 [1] 数据库选择会更快
  4. 强制我将这些 first() 值存储在单独的表中,我必须记住这一点
  5. 提醒我,我无法正确格式化我的 stackoverflow 帖子,因此该列表很可能会显示为纯文本

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

x.someField.first()

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

【问题讨论】:

    标签: python django database orm initialization


    【解决方案1】:

    这是一个视图。 Django 明确不是 MVC。

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

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

    【讨论】:

      猜你喜欢
      • 2014-04-01
      • 1970-01-01
      • 2018-04-18
      • 2019-11-29
      • 2021-11-04
      • 2020-12-22
      • 2014-07-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多