Сравнение экземпляров разных моделей - Django REST Framework
Я просто ищу ответ на мой (кажется, глупый) вопрос. Я уже просмотрел несколько сообщений от stackru, но любое из них было полезно:(
У меня вопрос как сравнить два экземпляра разных моделей с разными?
Вот мой случай:
У меня есть две модели: продукт и разъем. Сначала включите id(pk), name, ect. Другой включает id(pk), productId(fk), userId(fk) и т. Д.
Моя цель состоит в том, чтобы подготовить просмотр только этого продукта, который находится в db-таблице Connector как product(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 - Сравнение объектов, но для этого случая нет полезной информации)
2 ответа
Это должно работать
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)