【发布时间】:2020-04-14 08:14:39
【问题描述】:
我正在使用 Django 2.2,并且我有一个模型,其中包含两个类 Product 和 ProductRevision。当我检索Product 或Products 列表时,我总是获取相应的ProductRevision。 ProductRevision 对象递增,只有最后一个修订版应使用 Product 获取。
class Product(models.Model):
name = models.CharField(max_length=50, null=False, blank=False,
verbose_name=_("name"))
product_code = models.CharField(max_length=10, null=False, blank=False,
verbose_name=_("product code"))
slug = models.SlugField(null=False, unique=True)
@property
def current_item(self):
return ProductRevision.objects.filter(product=self, active=True).order_by('-version').first()
class ProductRevision(models.Model):
product = models.ForeignKey(Product, null=True, on_delete=models.PROTECT)
version = models.IntegerField(default=0,
verbose_name=_("version"))
active = models.BooleanField(default=False, null=False, blank=True,
verbose_name=_("is active"))
qty_close = models.IntegerField(default=0,
verbose_name=_("qty of accounts to be closed"))
price_eur = models.DecimalField(max_digits=6, decimal_places=2, default=0,
verbose_name=_("price in EUR"))
我尝试添加属性current_item 以获取给定产品的最新版本。虽然这是有效的,但效率非常低,因为当我在模板中使用它时,每次显示来自相关 ProductRevision 的字段时,它都会访问数据库。
我根据旧版本的 Django (Fetch latest related objects in django) 找到了这个答案,我想知道当前版本的 Django 是否没有其他方法可以达到相同的结果?我对在我的模型中实现这一点特别感兴趣。
【问题讨论】:
-
你在使用 postgres 吗?
-
是的,postgres 11.6
标签: django django-models django-select-related django-related-manager