这是一个简单的例子来说明我的观点
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中使用它。有没有办法优化这个要求。
由于
答案 0 :(得分:0)
我在评论中提出的观点值得进一步解释,因为很明显你对Django模型层的工作方式有很大的误解。
一旦Django从数据库中获取了一个对象,对该对象中不同属性的后续调用不会触发对db的额外调用。除非您特别要求,否则模型的所有属性将同时获取并存储在模型实例中。 (唯一的情况是,如果属性是外键,则会发生额外调用,但即使在那里,您也可以使用select_related
来避免这种情况。)
实际上,即使每个对象都有一个调用,也不是这样,因为Django只需一次调用即可获取页面上的所有行。