Объект NoneType не вызывается в приложении Django - PullRequest
0 голосов
/ 15 февраля 2020

Я сделал модель продукта в django. Я могу вставить продукты, но теперь у меня проблемы с получением продуктов. Когда я перечисляю продукты, я получаю все предметы. Но когда я пытаюсь получить только один, restframework дает мне эту ошибку:

Я пытаюсь получить доступ к продукту, используя этот URL http://localhost:4444/products/1

TypeError at /products/1
'NoneType' object is not callable
Request Method: GET
Request URL:    http://localhost:4444/products/1
Django Version: 2.2.8
Exception Type: TypeError
Exception Value:    
'NoneType' object is not callable
Exception Location: C:\Users\vini\Documents\VirtualEnv\mystore\lib\site-packages\rest_framework\generics.py in get_serializer, line 110
Python Executable:  C:\Users\vini\Documents\VirtualEnv\mystore\Scripts\python.exe
Python Version: 3.8.0
Python Path:    
['C:\\Users\\vini\\Documents\\GitHub\\mystore-backend',
 'C:\\Users\\vini\\Documents\\VirtualEnv\\mystore\\Scripts\\python38.zip',
 'C:\\Users\\vini\\Documents\\VirtualEnv\\mystore\\DLLs',
 'C:\\Users\\vini\\Documents\\VirtualEnv\\mystore\\lib',
 'C:\\Users\\vini\\Documents\\VirtualEnv\\mystore\\Scripts',
 'c:\\users\\vini\\appdata\\local\\programs\\python\\python38\\Lib',
 'c:\\users\\vini\\appdata\\local\\programs\\python\\python38\\DLLs',
 'C:\\Users\\vini\\Documents\\VirtualEnv\\mystore',
 'C:\\Users\\vini\\Documents\\VirtualEnv\\mystore\\lib\\site-packages']
Server time:    Sab, 15 Fev 2020 19:41:00 +0000

Модель:

class Product(UGCModel):

    class Meta:
        app_label = 'product'


    avatar = models.ForeignKey('image.Image',
                               related_name='product_image',
                               on_delete=models.CASCADE)
    # Variable to hide in store
    hide = models.BooleanField(default=False)
    # Value of product
    value = models.DecimalField(max_digits=6, decimal_places=2,
                                validators=[MinValueValidator(0)])
    # Name of the product
    title = models.CharField(max_length=150, null=False, blank=False)
    # Quantity of product in stock
    quantity = models.IntegerField(default=0, blank=False, null=False,
                                   validators=[MinValueValidator(0)])
    # Discount of the product
    discount = models.IntegerField(default=0,
                                   validators=[MaxValueValidator(100),
                                               MinValueValidator(0)])
    # description of the product
    resume = models.CharField(max_length=1000, blank=True)

    def __str__(self):
        return '(Product)%s' % self.uid

URL:

from django.urls import path


from . import views
import product.views as v

product_detail = v.ProductViewSet.as_view({'get': 'retrieve',
                                           'delete': 'destroy',
                                           'patch': 'partial_update'})

product_list = v.ProductViewSet.as_view({'post': 'create', 'get': 'list'})

urlpatterns = [
    path('products/<int:id>', product_detail),
    path('products', product_list),
]

Просмотр:

from rest_framework import viewsets
from .models import Product
from .serializers import (ProductListSerializer, ProductCreateSerializer)
from rest_framework.response import Response
from rest_framework import status, generics

class ProductViewSet(viewsets.ModelViewSet):

    lookup_field = 'id'
    model = Product
    queryset = Product.objects.all()
    serializer_class = ProductListSerializer

    def get_serializer_class(self):
        if self.request.method == 'GET':
            return ProductListSerializer
        elif self.request.method == 'POST':
            return ProductCreateSerializer

Сериализаторы:

from .models import Product
from rest_framework import serializers
import image.fields as f
import image.serializers as s

class ProductListSerializer(serializers.ModelSerializer):

    class Meta:
        model = Product
        fields = ['uid', 'title', 'avatar', 'value',
                  'quantity', 'discount', 'resume']

    avatar = s.ImageListSerializer()


class ProductCreateSerializer(serializers.ModelSerializer):

    class Meta:
        model = Product
        fields = ['uid', 'title', 'avatar', 'value', 'hide',
                  'quantity', 'discount', 'resume']

    avatar = f.ImageField()

enter image description here

1 Ответ

1 голос
/ 15 февраля 2020

Как сказал @Vinicus Morais, вам нужно сделать serializer_class = ProductListSerializer. это должно исправить ошибку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...