如何注释特定的相关字段值
How to Annotate Specific Related Field Value
我正在尝试优化一些代码。我有许多相关模型的模型,我想根据这些相关模型的特定类型的字段值进行注释和过滤,因为它们被设计为通用的。我可以找到我想要的相关模型类型的所有实例,或者与父相关的所有模型,但找不到与父相关的特定类型的相关模型。谁能给点建议?
我最初尝试过
parents = parent.objects.all()
parents.annotate(field_value=Subquery(related_model.objects.get(
field__type='specific',
parent_id=OuterRef('id'),
).value)))
但是得到错误This queryset contains a reference to an outer query and may only be used in a subquery
。当我尝试
parents = parent.objects.all()
parents.annotate(field_value=Q(related_model.objects.get(
field__type='specific',
parent_id=F('id'),
).value)))
我得到 DoesNotExist: related_field matching query does not exist.
,这看起来更接近但仍然不起作用。
模型结构:
class parent(models.Model):
id = models.IntegerField(null=False, primary_key=True)
class field(models.Model):
id = models.IntegerField(null=False, primary_key=True)
type = models.CharField(max_length=60)
class related_model(models.Model):
parent = models.ForeignKey(parent, on_delete=models.CASCADE, related_name='related_models')
field = models.ForeignKey(field, on_delete=models.CASCADE, related_name='fields')
我想做的事有可能吗?
没关系我决定做一个反向查找,有点像
parent_ids = related_model.objects.filter(field__type='specific', parent_id__in=list_of_parents).values_list('parent_id')
parents.objects.filter(id__in=parents_id)
我正在尝试优化一些代码。我有许多相关模型的模型,我想根据这些相关模型的特定类型的字段值进行注释和过滤,因为它们被设计为通用的。我可以找到我想要的相关模型类型的所有实例,或者与父相关的所有模型,但找不到与父相关的特定类型的相关模型。谁能给点建议?
我最初尝试过
parents = parent.objects.all()
parents.annotate(field_value=Subquery(related_model.objects.get(
field__type='specific',
parent_id=OuterRef('id'),
).value)))
但是得到错误This queryset contains a reference to an outer query and may only be used in a subquery
。当我尝试
parents = parent.objects.all()
parents.annotate(field_value=Q(related_model.objects.get(
field__type='specific',
parent_id=F('id'),
).value)))
我得到 DoesNotExist: related_field matching query does not exist.
,这看起来更接近但仍然不起作用。
模型结构:
class parent(models.Model):
id = models.IntegerField(null=False, primary_key=True)
class field(models.Model):
id = models.IntegerField(null=False, primary_key=True)
type = models.CharField(max_length=60)
class related_model(models.Model):
parent = models.ForeignKey(parent, on_delete=models.CASCADE, related_name='related_models')
field = models.ForeignKey(field, on_delete=models.CASCADE, related_name='fields')
我想做的事有可能吗?
没关系我决定做一个反向查找,有点像
parent_ids = related_model.objects.filter(field__type='specific', parent_id__in=list_of_parents).values_list('parent_id')
parents.objects.filter(id__in=parents_id)