【问题标题】:return 2 values django model methods返回 2 个值 django 模型方法
【发布时间】:2013-03-29 06:46:51
【问题描述】:

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

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

谢谢

【问题讨论】:

  • 过早的优化是万恶之源。不要猜测,个人资料。
  • 为什么你认为数据库被命中两次?那不是真的。
  • @Daniel 如果这是真的,那么执行没有问题。但我认为它会命中两次,因为有两种单独的方法调用数据库。
  • @catherine 是的,例如在会计中可能需要它,一个是借方金额,一个是贷方金额,具体取决于布尔字段

标签: django django-admin


【解决方案1】:

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

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

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

【讨论】:

  • 我同意,我不精通 django 的细微差别,但这并不意味着误解。感谢您消除对优化的担忧。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-05-27
  • 2011-02-19
  • 2021-06-06
  • 1970-01-01
  • 2018-07-20
  • 2012-05-10
  • 2017-10-11
相关资源
最近更新 更多