返回2个值django模型方法

时间:2013-03-29 06:46:51

标签: django django-admin

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

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中使用它。有没有办法优化这个要求。

由于

1 个答案:

答案 0 :(得分:0)

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

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

实际上,即使每个对象都有一个调用,也不是这样,因为Django只需一次调用即可获取页面上的所有行。