Исходный текст исключения был: объект 'int' не имеет атрибута 'product' - PullRequest
0 голосов
/ 06 ноября 2019

Когда я собираюсь передать объекты списка в URL, я получаю эту ошибку

Got AttributeError when attempting to get a value for field `product` on serializer `ProductForParameterSerializer`.
The serializer field might be named incorrectly and not match any attribute or key on the `int` instance.
Original exception text was: 'int' object has no attribute 'product'.

`

class ProductParameter(models.Model):
    product_attribute = models.ForeignKey(ProductAttribute, on_delete=models.CASCADE)
    product = models.ForeignKey(Product, on_delete=models.CASCADE, related_name='product_parameters')
    parameter = models.CharField(max_length=100, default='-')

и serializers.py выглядит следующим образом

class ProductForParameterSerializer(serializers.ModelSerializer):
    name = serializers.CharField(source='product.name', max_length=255, read_only=True)
    product_desc = serializers.CharField(source='product.description', max_length=255, read_only=True)
    image = serializers.ImageField(source='product.image', read_only=True)
    price = serializers.DecimalField(source='product.price', max_digits=10, decimal_places=2, read_only=True)
    rating = serializers.CharField(source='product.rating', max_length=10, read_only=True)

    class Meta:
        model = ProductParameter
        fields = ('id', 'product', 'name', 'price', 'product_desc', 'image', 'rating')

, как вы можете видеть в модели, есть Product ForeignKey. В этой модели может быть более одного продукта, и из этой таблицы я должен получить продукт, идентификатор которого уникален. Мне не нужны дубликаты продуктов. и для этого я использую это представление

class ProductForParameterView(generics.ListAPIView):
    serializer_class = ProductForParameterSerializer

    def get_queryset(self):
        query_params = self.request.query_params
        products = query_params.get('product', None)

        productParams = []

        if products is not None:
            for product in products.split('|'):
                productParams.append(int(product))

        if products is not None:
            queryset = ProductParameter.objects.all()
            queryset = queryset.filter(product_id__in=productParams)
            qs = queryset.values_list('product', flat=True).distinct()
            return qs

, но я получаю ошибку. Как я могу это исправить? Заранее спасибо!

1 Ответ

0 голосов
/ 06 ноября 2019

Вы возвращаете queryset.values_list('product', flat=True).distinct() в наборе запросов, который дает вам список идентификаторов продуктов. Вот почему вы получаете эту ошибку. Вы должны вернуть список продуктов по вашему get_queryset методу.

class ProductForParameterView(generics.ListAPIView):
    serializer_class = ProductForParameterSerializer

    def get_queryset(self):
        query_params = self.request.query_params
        products = query_params.get('product', None)

        productParams = []

        if products is not None:
            for product in products.split('|'):
                productParams.append(int(product))

        if products is not None:
            queryset = ProductParameter.objects.all()
            queryset = queryset.filter(product_id__in=productParams)
            qs = queryset.values_list('product', flat=True).distinct()
            return Product.objects.filter(id__in=qs)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...