0

这是一个简单的例子来说明我的观点

class A(models.Model):
  boolean_field=models.BooleanField(default=False)
  name = models.CharField(max_length=50, blank=True)
  some_other_field = models.CharField(max_length=10)

  def true_value(self):
    if self.boolean_field:
      return self.name
    else:
      return ''

  def false_value(self):
    if not self.boolean_field:
      return self.name
    else:
      return ''

admin.py

class Aadmin(admin.ModelAdmin):
  list_display = ('true_value', 'some_other_field', 'false_value')

在上面的示例中,我认为数据库被命中两次。有什么方法可以一次性获取值并在 list_display 中使用它。有没有办法优化这个要求。

谢谢

4

1 回答 1

0

我在评论中提出的观点值得进一步解释,因为很明显你对 Django 模型层的工作方式有很大的误解。

一旦 Django 从数据库中获取了一个对象,随后对该对象中不同属性的调用不会触发对 db 的额外调用。除非您特别要求,否则模型的所有属性都会同时获取并存储在模型实例中。(唯一会发生额外调用的情况是属性是外键,但即使在那里你也可以避免使用select_related.)

事实上,每个对象都不会调用一次,因为 Django 只需一次调用即可获取页面上的所有行。

于 2013-03-29T14:37:16.343 回答