cmyser
@cmyser
начинающий програмист

Ошибка No data provided, 400 от Django-сервера как исправить?

Разрабатываю бкенд, работают POST GET and DELETE (а PUT нет) запросы (все в Postman проверяю), не понимаю что может вызвать такую ошибку, авторизуюсь
InnVk.png

в теле передаю
u1Xwm.png

urls:
from django.urls import path
from bkend.views import *

from bkend.models import *
app_name = "bkend"

urlpatterns = [
    path('adresses/', Adresses.as_view()),
    path('servises/', Servises.as_view()),
    path('prices/', Prices.as_view()),
    path('applications/', Applications.as_view()),
    path('adresses/<int:pk>', Adresses.as_view()),
    path('servises/<int:pk>', Servises.as_view()),
    path('prices/<int:pk>', Prices.as_view()),
    path('applications/<int:pk>', Applications.as_view()),
]


serializer:

from rest_framework import serializers
from django.contrib.auth.models import User

from bkend.models import *


class UserSerializer(serializers.ModelSerializer):
    """Сериализация пользователя"""
    class Meta:
        model = User
        fields = ("id", "username")

class AdressSerializers(serializers.ModelSerializer):
    """Сериализация adresa """
    user = UserSerializer()
    adres = serializers.CharField(max_length=150)
    number_phon = serializers.CharField(max_length=150)
    x_re = serializers.FloatField(default=0)
    y_re = serializers.FloatField(default=0)
    start = serializers.CharField(max_length=150)
    stop = serializers.CharField(max_length=150)
    idi = serializers.IntegerField(default=0)

    def update(self, instance, validated_data):
        instance.user = validated_data.get('user', instance.user)
        instance.adres = validated_data.get('adres', instance.adres)
        instance.number_phon = validated_data.get('number_phon', instance.number_phon)
        instance.x_re = validated_data.get('x_re', instance.x_re)
        instance.y_re = validated_data.get('y_re', instance.y_re)
        instance.start = validated_data.get('start', instance.start)
        instance.stop = validated_data.get('stop', instance.stop)
        instance.idi = validated_data.get('idi', instance.idi)

        instance.save()
        return instance

    class Meta:
        model = Adress
        fields = ("user","adres", "number_phon", "x_re", "y_re", "start", "stop", "idi")


class ServiseSerializers(serializers.ModelSerializer):
    user = UserSerializer()
    idi = serializers.IntegerField(default=0)
    serviz = serializers.CharField(max_length=150)
    coment = serializers.CharField(max_length=150)
    tip = serializers.CharField(max_length=150)
    popularity = serializers.IntegerField(default=0)


    def update(self, instance, validated_data):
        instance.user = validated_data.get('user', instance.user)
        instance.idi = validated_data.get('idi', instance.idi)
        instance.serviz = validated_data.get('serviz', instance.serviz)
        instance.coment = validated_data.get('coment', instance.coment)
        instance.tip = validated_data.get('tip', instance.tip)
        instance.popularity = validated_data.get('popularity', instance.popularity)

        instance.save()
        return instance


    class Meta:
        model = Service
        fields = ("user","idi", "serviz", "coment", "tip", "popularity")


class PriceSerializers(serializers.ModelSerializer):
    user = UserSerializer()
    idi = serializers.IntegerField(default=0)
    tip = serializers.CharField(max_length=150)
    idi_price = serializers.IntegerField(default=0)

    def create(self, validated_data):
        return Price.objects.create(**validated_data)

    def update(self, instance, validated_data):
        # instance.user = validated_data.get('user', instance.user)
        instance.idi = validated_data.get('idi', instance.idi)
        instance.tip = validated_data.get('tip', instance.tip)
        instance.idi_price = validated_data.get('idi_price', instance.idi_price)

        instance.save()
        return instance



    class Meta:
        model = Price
        fields = ("id","user","idi", "tip", "idi_price")

class ApplicationSerializers(serializers.ModelSerializer):
    user = UserSerializer()
    idi = serializers.IntegerField(default=0)
    coment = serializers.CharField(max_length=150)
    marka = models.CharField(max_length=150)
    symma = serializers.CharField(max_length=150)
    sevises = serializers.CharField(max_length=150)
    phone = serializers.CharField(max_length=150)
    size = serializers.CharField(max_length=150)
    adres = serializers.CharField(max_length=150)
    number_phon = serializers.CharField(max_length=150)
    date_time_start = serializers.DateTimeField()
    date_and_time = serializers.CharField(max_length=150)


    def update(self, instance, validated_data):
        instance.user = validated_data.get('user', instance.user)
        instance.adres = validated_data.get('adres', instance.adres)
        instance.number_phon = validated_data.get('number_phon', instance.number_phon)
        instance.coment = validated_data.get('coment', instance.coment)
        instance.marka = validated_data.get('marka', instance.marka)
        instance.symma = validated_data.get('symma', instance.symma)
        instance.sevises = validated_data.get('sevises', instance.sevises)
        instance.idi = validated_data.get('idi', instance.idi)
        instance.phone = validated_data.get('phone', instance.phone)
        instance.size = validated_data.get('size', instance.size)
        instance.date_time_start = validated_data.get('date_time_start', instance.date_time_start)
        instance.date_and_time = validated_data.get('date_and_time', instance.date_and_time)

        instance.save()
        return instance



    class Meta:
        model = Application
        fields = ("user","idi", "coment", "marka", "symma", "sevises", "phone", "size", "adres", "number_phon", "date_time_start", "date_and_time")


views:

from django.shortcuts import render
from rest_framework.generics import get_object_or_404

# Create your views here.
from typing import Type, List

from django.shortcuts import render
from django.contrib.auth.models import User
# Create your views here.
from django.db.models import Q
from rest_framework.permissions import IsAuthenticated

from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import permissions

from django.contrib.auth.models import User

from bkend.models import *
from bkend.serializers import *




class Adresses(APIView):
    """Комнаты чата"""
    # permission_classes: List[Type[IsAuthenticated]] = [permissions.IsAuthenticated, ]


    def get(self, request):
        permission_classes = [permissions.AllowAny, ]
        adds = Adress.objects.all()
        serializer = AdressSerializers(adds, many=True)
        return Response({"adds": serializer.data})

    def post(self, request):
        permission_classes = [permissions.IsAuthenticated, ]
        user = request.data.get("user")
        try:
            Adresses.objects.create(adres=request.adres)
            return Response(status=201)
        except:
            return Response(status=400)


    def put(self, request, pk):
        saved_article = get_object_or_404(Adress.objects.all(), pk=pk)
        data = request.data.get('adress')
        serializer = AdressSerializer(instance=saved_adress, data=data, partial=True)
        if serializer.is_valid(raise_exception=True):
            adress_saved = serializer.save()
        return Response({
            "success": "Adress '{}' updated successfully".format(adress_saved.title)
        })


    def delete(self, request, pk):
        # Get object with this pk
        adres = get_object_or_404(Adress.objects.all(), pk=pk)
        adres.delete()
        return Response({
            "message": "Adres with id `{}` has been deleted.".format(pk)
        }, status=204)


class Prices(APIView):
    def get(self, request):
        permission_classes = [permissions.AllowAny, ]
        adds = Price.objects.all()
        serializer = PriceSerializers(adds, many=True)
        return Response({"adds": serializer.data})

    def post(self, request):
        permission_classes = [permissions.IsAuthenticated, ]

        user = request.data.get("user")
        try:
            Price.objects.create(adres=request.adres)
            return Response(status=201)
        except:
            return Response(status=400)


    def put(self, request, pk):
        saved_price = get_object_or_404(Price.objects.all(), pk=pk)
        data = request.data.get('price')
        serializer = PriceSerializers(instance=saved_price, data=data, partial=True)
        if serializer.is_valid(raise_exception=True):
            price_saved = serializer.save()
        return Response({
            "success": "Price '{}' updated successfully".format(price_saved.title)
        })

    def delete(self, request, pk):
        # Get object with this pk
        pric = get_object_or_404(Price.objects.all(), pk=pk)
        pric.delete()
        return Response({
            "message": "Price with id `{}` has been deleted.".format(pk)
        }, status=204)


все проверяю пока на классе Prices
  • Вопрос задан
  • 930 просмотров
Решения вопроса 1
@galaxy
data = request.data.get('price')

А у вас в посте есть поле price? Я вижу, что там сразу отдельные поля модели идут
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы