Django 如何使用“选择相关对象”访问相关对象

Django 如何使用“选择相关对象”访问相关对象,django,django-rest-framework,Django,Django Rest Framework,我有3种型号,如下所述- 订单 class Orders(BaseModel): created_by = models.ForeignKey(User, on_delete=models.PROTECT, null=False, blank=False) property = models.ForeignKey(Properties, on_delete=models.PROTECT, null=False, blank=False) .... .... c

我有3种型号,如下所述-

订单

class Orders(BaseModel):

    created_by = models.ForeignKey(User, on_delete=models.PROTECT, null=False, blank=False)
    property = models.ForeignKey(Properties, on_delete=models.PROTECT, null=False, blank=False)
    ....
    ....
class Properties(BaseModel):

    property_long_name = models.CharField(max_length=255, blank=False)
    property_trading_name = models.CharField(unique=True, max_length=255, blank=False)
    ....
    ....
class PropertyOwners(BaseModel):

    property = models.ForeignKey(Properties, related_name='property_owners', on_delete=models.PROTECT, blank=False, null=False)
    owner = models.ForeignKey(User, on_delete=models.PROTECT, blank=False, null=False)
    ....
    ....
属性

class Orders(BaseModel):

    created_by = models.ForeignKey(User, on_delete=models.PROTECT, null=False, blank=False)
    property = models.ForeignKey(Properties, on_delete=models.PROTECT, null=False, blank=False)
    ....
    ....
class Properties(BaseModel):

    property_long_name = models.CharField(max_length=255, blank=False)
    property_trading_name = models.CharField(unique=True, max_length=255, blank=False)
    ....
    ....
class PropertyOwners(BaseModel):

    property = models.ForeignKey(Properties, related_name='property_owners', on_delete=models.PROTECT, blank=False, null=False)
    owner = models.ForeignKey(User, on_delete=models.PROTECT, blank=False, null=False)
    ....
    ....
业主

class Orders(BaseModel):

    created_by = models.ForeignKey(User, on_delete=models.PROTECT, null=False, blank=False)
    property = models.ForeignKey(Properties, on_delete=models.PROTECT, null=False, blank=False)
    ....
    ....
class Properties(BaseModel):

    property_long_name = models.CharField(max_length=255, blank=False)
    property_trading_name = models.CharField(unique=True, max_length=255, blank=False)
    ....
    ....
class PropertyOwners(BaseModel):

    property = models.ForeignKey(Properties, related_name='property_owners', on_delete=models.PROTECT, blank=False, null=False)
    owner = models.ForeignKey(User, on_delete=models.PROTECT, blank=False, null=False)
    ....
    ....
我试图查询
订单
,并希望锁定它将返回的行。我还想锁定
Properties
model的相关行。此外,这些属性将有一个或多个所有者,这些所有者存储在模型
PropertyOwners
中。我想锁定与该订单的属性相关的
ProprertyOwners

到目前为止,我试图这样做,但它没有工作,并返回我一个错误-

Queryset

Orders.objects.select_related('property__property_owners').select_for_update().exclude(created_by=created_by).values('id', 'property', 'units', 'created_by', 'sell_price_per_unit', 'order_status').filter(property=order_obj.property, order_type__name=SELL, order_status__in=[PARTIALLY_COMPLETED[1], OPEN[1]], sell_price_per_unit__lte=order_price).order_by('sell_price_per_unit')
错误-

django.core.exceptions.FieldError: Invalid field name(s) given in select_related: 'property_owners'. Choices are: property_type, created_by, approved_by, property_manager

queryset返回的所有订单将只属于一个属性。一个物业可能有一个或多个业主。

我认为
选择相关的
不适用于一对多关系。即使是这样,您也应该使用
属性\u所有者\u集
。我没有测试过这个,但尝试了
。prefetch\u related('property\uu property\u owners\u set')
。@Selcuk,我尝试过这个,但不起作用。