我正在使用 Django 2.2,并且我有一个包含两个类Product
和ProductRevision
. 当我检索一个Product
或Product
s 列表时,我总是获取相应的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 是否没有其他方法可以达到相同的结果?我对在我的模型中实现这一点特别感兴趣。