返回2个值django模型方法
这是一个简单的例子来说明我的观点返回2个值django模型方法,django,django-admin,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:
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')
在上面的例子中,我认为数据库被击中了两次。是否有任何方法可以一次性获取值并在列表显示中使用它。有没有办法优化这一要求
谢谢我在评论中提出的观点值得进一步解释,因为很明显你对Django的模型层的工作方式有很大的误解 Django从数据库中获取对象后,对该对象中不同属性的后续调用不会触发对db的额外调用。除非您特别要求,否则将同时获取模型的所有属性并将其存储在模型实例中。(发生额外调用的唯一情况是属性是外键,但即使在这种情况下,您也可以使用
select\u related
避免这种情况)
事实上,甚至每个对象都不会有一个调用,因为Django只需一个调用就可以获取页面上的所有行。过早优化是万恶之源。别猜了,profile.为什么你认为db会被击中两次?“那不是真的。@丹尼尔如果是真的,那么实现就没有问题了。但我认为它会击中两次,因为有两个单独的方法调用数据库。@catherine是的,可能需要它,例如在会计中,一个是借方金额,一个是贷方金额,取决于布尔字段。我同意,我不精通django的细微差别,但这并不意味着误解。感谢您消除了对优化的顾虑。