从 parent 访问 child
Accessing child from parent
我有以下定义的模型:
class PrimaryAsset(models.Model):
title = models.Charfield(max_length=200)
class Service(PrimaryAsset):
description = models.Charfield(max_length=200)
class Website(PrimaryAsset):
url = models.Charfield(max_length=200)
class AssetLinks(models.model):
high = models.ForeignKey(PrimaryAsset)
low = models.ForeignKey(PrimaryAsset)
AssetLinks.objects.filter(high=212)[0].low
当我执行上述筛选时,我如何知道 objects 是哪个实例(网站或服务)?另外,有没有办法避免使用 prefetch_related
的 N+1 查询,同时它也获取所有 child 信息?
您甚至可以使用 select_related
而不是 prefetch_related
。这样的事情应该可以解决问题:
asset = AssetLinks.objects.filter(high=212).select_related(
'high__service', 'high__website',
'low__service', 'low__website',
)[0]
#check for service/website
service = getattr(asset.high, 'service', None)
website = getattr(asset.high, 'website', None)
我有以下定义的模型:
class PrimaryAsset(models.Model):
title = models.Charfield(max_length=200)
class Service(PrimaryAsset):
description = models.Charfield(max_length=200)
class Website(PrimaryAsset):
url = models.Charfield(max_length=200)
class AssetLinks(models.model):
high = models.ForeignKey(PrimaryAsset)
low = models.ForeignKey(PrimaryAsset)
AssetLinks.objects.filter(high=212)[0].low
当我执行上述筛选时,我如何知道 objects 是哪个实例(网站或服务)?另外,有没有办法避免使用 prefetch_related
的 N+1 查询,同时它也获取所有 child 信息?
您甚至可以使用 select_related
而不是 prefetch_related
。这样的事情应该可以解决问题:
asset = AssetLinks.objects.filter(high=212).select_related(
'high__service', 'high__website',
'low__service', 'low__website',
)[0]
#check for service/website
service = getattr(asset.high, 'service', None)
website = getattr(asset.high, 'website', None)