比较不同模型的实例 - Django REST Framework

Comparing instance of different models - Django REST Framework

我只是在为我的(似乎很愚蠢的)问题寻找答案。我已经看过一些 Whosebug 帖子,但其中任何一个都有帮助:(

我的问题是如何比较不同模型的两个实例具有不同?

这是我的案例:

我有两个模型:产品和连接器。首先包括 id(pk)、名称等。另一个包括id(pk), productId(fk), userId(fk), ect.

我的目标是准备只列出连接器 db-table 中的产品的视图作为产品 (fk)。

def list(self, request, *args, **kwargs):
    # return only product user's watching
    userId = self.request.user.id
    connectorData = ConnectorModel.objects.filter(userId=userId)
    allProducts = self.get_queryset()
    productListToDisplay = []

    for product in allProducts:
        for connector in connectorData:
            if product.id == connector.productId:
                # HERE IS A PROBLEM 
                productListToDisplay.append(product)

    serializer = ProductSerializer(productListToDisplay, many=True)
    return Response(serializer.data)

问题是 Django 认为 "product.id" 和 "connector.productId" 是完全不同的类型。第一个是 "core.models.ProductModel" 第二个是 "core.models.ConnectorModel"。我试图使用 int() 解析它,但它会产生错误。

我如何比较这两个值以将对象添加到 productListToDisplay 数组?

(我看到了 django doc - Comparing objects 但没有对这种情况有用的信息)

这应该有效

connectorData = ConnectorModel.objects.filter(userId=userId, productId__in=all_products)

for connector in connectorData:
    productListToDisplay.append(connector.product)

你可以这样做:

productListToDisplay = ConnectorModel.objects.filter(userId=userId, product__isnull=False).prefetch_related('product').values_list('product', flat=True)