0

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

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

这是我的情况:

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

我的目标是准备仅列出连接器数据库表中的产品作为产品(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 - 比较对象,但对于这种情况没有有用的信息)

4

2 回答 2

1

这应该工作

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

for connector in connectorData:
    productListToDisplay.append(connector.product)
于 2018-12-09T14:47:01.793 回答
0

你可以这样做:

productListToDisplay = ConnectorModel.objects.filter(userId=userId, product__isnull=False).prefetch_related('product').values_list('product', flat=True)
于 2018-12-09T15:12:54.677 回答