Как я могу передать serializer.data в функцию create в views django?

views.py

def productslist(request):
    products = Products.objects.all()
    context = {'products':products}
    return render(request,'productslist.html',context)

def productsform(request):
    return render(request,'productscreate.html')
    @api_view(['GET','POST'])
    def products_list(request):

    if request.method == 'GET':
        product = Products.objects.all()
        serializer = Productserialize(product,many=True)
        return Response(serializer.data)
    
    elif request.method == 'POST':
        serializer = Productserialize(data=request.data)
    if serializer.is_valid():
        def create(serializer):
            return Products.objects.create(serializer)
    return Response(serializer.data)
    return Response(serializer.errors)

@api_view(['GET','PUT'])
def products_detail(request, pk):
  
    products = Products.objects.get(pk=pk)

  
    if request.method == 'GET':
        serializer = Productserialize(products)
        return Response(serializer.data)
  
    elif request.method == 'PUT':
        serializer = Productserialize(products, data=request.data)
  
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data)
        return Response(serializer.errors)

В файле views.py я сделал функцию create, но она не работает, не сохраняя данные Я хочу сохранить данные сериализатора с помощью функции create Я хочу передать serializer.data в функцию create в post методе api

serializer.py

class Productserialize(serializers.Serializer):
    id = serializers.IntegerField(read_only=True)
    title = serializers.CharField(required=False, allow_blank=True, max_length=100)
    description = serializers.CharField(required=False, allow_blank=True, max_length=100)
    image = serializers.FileField()

    def create(self, validated_data):
        """
        Create and return a new `Snippet` instance, given the validated data.
        """
        return Products.objects.create(**validated_data)

Просто используйте ListCreateAPIView и используйте ModelSerializer вместо Serializer.

# Serializer
class ProductSerializer(serializers.ModelSerializer):
    
    class Meta:
        fields = ('id', 'title', 'description', 'image')
        model = Product


# View
from rest_framework.generics import ListCreateAPIView

class ProductListCreate(ListCreateAPIView):
    serializer_class = ProductSerializer
    queryset = Product.objects.all()

ListCreateAPIView обрабатывают GET для списка и POST для создания новых объектов, вам не нужно переопределять что-либо еще.

вы можете попробовать вызвать его

if serializer.is_valid():
        def create(serializer):
            return Products.objects.create(serializer.data)
        crerate(serializer)
    return Response(serializer.data)
Вернуться на верх