比较不同模型的实例 - 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)
我只是在为我的(似乎很愚蠢的)问题寻找答案。我已经看过一些 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)