Я сделал модель продукта в 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()
