Search code examples
pythondjango-rest-frameworkpythonanywhere

DJANGO API POST : "This field is required."


I am a newly graduated software engineer, I want to write an API with Django. This api is giving me an error like this. I'm publishing via PythonAnyWhere. There is no problem when working in Local, but there is a problem in PythonAnyWhere. problem : "This field is required." .. Can you help me ?

my serializers.py

from rest_framework import serializers
from Market.models import Urun, Kategori


class UrunSerializer(serializers.ModelSerializer):
    class Meta:
        model = Urun
        fields = [
            'urun_adi',
            'mevcut_adet',
            'alis_fiyati',
            'satis_fiyati',
            'barkodu',

        ]

my Views.py

from rest_framework.filters import SearchFilter, OrderingFilter
from rest_framework import generics
from rest_framework.mixins import ListModelMixin, CreateModelMixin
from rest_framework.generics import (
    ListAPIView,
    RetrieveAPIView,
    DestroyAPIView,
    UpdateAPIView,
    CreateAPIView,
    RetrieveUpdateAPIView,
    ListCreateAPIView, GenericAPIView,
)

from Market.api.paginations import UrunPagination
from Market.models import Urun,Kategori,UrunSatis
from Market.api.serializers import (
    UrunSerializer,

)

#my custom permission
from Market.api.permissions import IsOwner

from rest_framework.views import APIView

from rest_framework.permissions import (
IsAuthenticated,
IsAdminUser,
)

from django.http import JsonResponse

from rest_framework.decorators import api_view
from rest_framework.response import Response

########FunctionBasedClass
######Bu kısmı generic views kullanıdığımız için geçtik
##### Ama bu kısma yer vermem gerekiyor.. Yapılacak
################





@api_view(['GET'])
def getRoutes(request):


                routes=[
                    {
                        'Endpoint':'api/market/UrunlerList/',
                        'method':'GET',
                        'body':None,
                        'description':'Returns an array of product / tüm ürünler listesini dönder'
                    },
                    {
                        'Endpoint': 'api/market/Kategoriler',
                        'method': 'GET',
                        'body': None,
                        'description': 'Returns a single product / kategorileri görüntüle'
                    },

                    {
                        'Endpoint': 'api/market/create/',
                        'method': 'GET',
                        'body': None,
                        'description': 'create a new product / yeni bir ürün ekle'
                    },

                    {
                        'Endpoint': 'api/market/delete/<slug>',
                        'method': 'GET',
                        'body': None,
                        'description': 'delete a one product with slug/ sluh yazarak bir ürünü sil'
                    },
                    {
                        'Endpoint': 'api/market/update/<slug>',
                        'method': 'GET',
                        'body': None,
                        'description': 'Update a product with slug/ Bİr ürünü güncellleme'
                    },
                    {
                        '-------------------------------- ---------------'
                    },
                    {
                        'Arama Url sorgusu için':'?search=kek',
                        'body':None,
                        'description':'arama yapmak için örneğin kek ( ürün adı üzerinden arama yapar)'
                    },
                    {
                        'Aramayı filtrelemek için':'?ordering=alis_fiyatı',
                        'body':None,
                        'description':'filtrelemeyi ve ya listeyi sıralamak için'
                    },

                ]
                return Response(routes)

class UrunListAPIView(ListCreateAPIView):


    serializer_class = UrunSerializer
    filter_backends = [SearchFilter,OrderingFilter]
    search_fields= ['urun_adi']
    pagination_class = UrunPagination
    def get_queryset(self):
        queryset=Urun.objects.filter(draft=False)
        return queryset

    #permission_classes = [permissions.IsAuthenticated]

class KategoriListAPIView(ListAPIView):
    queryset = Kategori.objects.all().order_by('-create_at')


class UrunDetailAPIView(RetrieveAPIView):
    queryset = Urun.objects.all()
    serializer_class = UrunSerializer
    lookup_field = 'slug'

class UrunDeleteAPIView(DestroyAPIView):
    queryset = Urun.objects.all()
    serializer_class = UrunSerializer
    lookup_field = 'slug'
    permission_classes = [IsOwner]
    """
class UrunUpdateAPIView(RetrieveUpdateAPIView):
    queryset = Urun.objects.all()
    serializer_class = UrunUpdateCreateAPISerializer
    lookup_field = 'slug'
    permission_classes = [IsOwner]
    def perform_update(self, serializer):
        serializer.save(modified_by=self.request.user)

class UrunCreateAPIView(ListCreateAPIView):
    queryset = Urun.objects.all()

    serializer_class = UrunUpdateCreateAPISerializer
    #permission_classes = [IsAuthenticated]



class UrunSatisCreateAPIView(CreateAPIView):
    queryset = UrunSatis.objects.all()

    serializer_class =UrunSatisUpdateCreateAPISerializer

    def perform_create(self, serializer):
        serializer.save(user=self.request.user)

"""
class UrunListCreateAPIView(ListModelMixin,CreateModelMixin,GenericAPIView):

    queryset = Urun.objects.all()
    serializer_class = UrunSerializer

    #listeliyor
    def get(self,request,*args,**kwargs):
        return self.list(request,*args,**kwargs)

    #create ediyor
    def post(self, request, *args, **kwargs):
        return self.create(request, *args, **kwargs)

I am using "class UrunListAPIView(ListCreateAPIView):" for create new Product. when ı try create a new product, DJANGO saying ""This field is required.""

****** My models.py

from django.db import models
from slugify import slugify
from django.utils import timezone


from django.contrib.auth.models import User


class Kategori(models.Model):
    STATUS = (
        ('True','Evet'),
        ('False','Hayır'),
    )
    title = models.CharField(max_length=30,)
    keywords = models.CharField(blank=True,max_length=255)
    description = models.CharField(blank=True,max_length=255)
    image=models.ImageField(blank=True,upload_to='media/Market/Kategoriler')
    status=models.CharField(max_length=10,choices=STATUS)
    slug = models.SlugField(unique=True, max_length=150)
    parent = models.ForeignKey('self',blank=True,null=True, related_name='children', on_delete=models.CASCADE)



    create_at = models.DateTimeField(auto_now_add=True)

    update_at = models.DateTimeField(auto_now=True)



    def __str__(self):
        return self.title

    def get_slug(self):

        slug = slugify(self.title.replace("ı", "i"))
        # bolge isimlerinde ı ları i yaparak bolge ismine göre slug atar..
        unique = slug
        number = 1

        while Kategori.objects.filter(slug=unique).exists():
            unique = '{}-{}'.format(slug, number)
            # eğer aynı bolge girişi varsa yanına 1 ekleyecek devam edecek
            number += 1
        return unique

    def save(self, *args, **kwargs):
        if not self.id:  # eğer girdi varsa oluşturmuyor modified e geçiyor
            self.create_at = timezone.now()  # eğer girdi yoksa ona göre created date oluşturuyor

        self.update_at = timezone.now()  # zaten girdisi olanı update etmek..
        # self.slug = self.get_slug()
        return super(Kategori, self).save(*args, **kwargs)
"""
class UrunOzellik(models.Model):
    urun_adi = models.CharField(max_length=50, verbose_name="ürün adı")
    alis_fiyati = models.FloatField(default=1)
    satis_fiyati = models.FloatField(default=1)

    barkodu = models.IntegerField(default=1)

    skt = models.DateTimeField()

    mevcut_adet = models.IntegerField(default=1)

    draft = models.BooleanField(default=False)

    created = models.DateTimeField(editable=False)
    modified = models.DateTimeField()

    slug = models.SlugField(max_length=150)

    def get_slug(self):

        slug = slugify(self.urun_adi.replace("ı", "i"))
        # bolge isimlerinde ı ları i yaparak bolge ismine göre slug atar..
        unique = slug
        number = 1

        while UrunOzellik.objects.filter(slug=unique).exists():
            unique = '{}-{}'.format(slug, number)
            # eğer aynı bolge girişi varsa yanına 1 ekleyecek devam edecek

            number += 1
        return unique
    def __str__(self):
        return self.urun_adi

    def save(self, *args, **kwargs):
        if not self.id:  # eğer girdi varsa oluşturmuyor modified e geçiyor
            self.created = timezone.now()  # eğer girdi yoksa ona göre created date oluşturuyor

        self.modified = timezone.now()  # zaten girdisi olanı update etmek..

        return super(UrunOzellik, self).save(*args, **kwargs)
"""

class Urun(models.Model):
    #user=models.ForeignKey(User,on_delete=models.CASCADE,default=1,blank=True, null=True)

    #yurt = models.ForeignKey(Yurt, on_delete=models.CASCADE, default=1,blank=True, null=True)
    STATUS=(
        ('True','Evet'),
        ('False','Hayır'),
    )
    urun_adi = models.CharField(max_length=50, verbose_name="ürün adı")

    #urun_ozellik = models.ForeignKey(UrunOzellik, on_delete=models.CASCADE, default=1)
    kategori = models.ForeignKey(Kategori, on_delete=models.CASCADE, blank=True, null=True)

    #miktar
    mevcut_adet = models.IntegerField(default=1,blank=True, null=True)

    alis_fiyati = models.FloatField(default=1,blank=True, null=True)

    #price
    satis_fiyati = models.FloatField(default=1,blank=True, null=True)

    barkodu = models.IntegerField(default=1)

    image = models.ImageField(blank=True,null=True,upload_to="media/Market/Ürünler")


    status=models.CharField(max_length=10,choices=STATUS,default=True)

    draft = models.BooleanField(default=False,blank=True, null=True)

    create_at = models.DateTimeField(auto_now_add=True)

    update_at = models.DateTimeField(auto_now=True)

    slug = models.SlugField(unique=True, max_length=150, editable=False)

    #modified_by = models.ForeignKey(User,on_delete=models.SET_NULL,null=True,related_name="modified_by")



    def save(self, *args, **kwargs):
        if not self.id:  # eğer girdi varsa oluşturmuyor modified e geçiyor
            self.create_at = timezone.now()  # eğer girdi yoksa ona göre created date oluşturuyor

        self.update_at = timezone.now()  # zaten girdisi olanı update etmek..
        self.slug = self.get_slug()
        return super(Urun, self).save(*args, **kwargs)

    def __str__(self):
        return self.urun_adi

    def get_slug(self):
        if self.urun_adi is None:
            return None

        slug = slugify(self.urun_adi)
        # ürün isimlerinde ı ları i yaparak bolge ismine göre slug atar..
        unique = slug
        number = 1

        while Urun.objects.filter(slug=unique).exists():
            unique = '{}-{}'.format(slug, number)
            # eğer aynı ürün girişi varsa yanına 1 ekleyecek devam edecek
            number += 1
        return unique

class ImageUrun(models.Model):
    urun = models.ForeignKey(Urun,on_delete=models.CASCADE)
    title=models.CharField(max_length=50)
    image = models.ImageField(blank=True,null=True,upload_to="media/Market/Ürünler")

    def __str__(self):
        return self.title

class UrunAlis(models.Model):
    urun = models.ForeignKey(Urun, on_delete=models.CASCADE, default=1)

    adet = models.IntegerField()

    user = models.ForeignKey(User, on_delete=models.CASCADE, default=1)

    draft = models.BooleanField(default=False)

    created = models.DateTimeField(editable=False)
    modified = models.DateTimeField()


    def save(self, *args, **kwargs):
        if not self.id:  # eğer girdi varsa oluşturmuyor modified e geçiyor
            self.created = timezone.now()  # eğer girdi yoksa ona göre created date oluşturuyor

        self.modified = timezone.now()  # zaten girdisi olanı update etmek..

        return super(UrunAlis, self).save(*args, **kwargs)

    def __str__(self):
        return self.urun.urun_adi


class UrunSatis(models.Model):

    alinanUrun = models.CharField(max_length=50,null=True,blank=True,default='deneme')

    odenecek_miktar=models.IntegerField(blank=True,null=True,default=0)

    user = models.CharField(max_length=50,null=True,blank=True,default='denemeUser')





    """def save(self, *args, **kwargs):
        if not self.id:  # eğer girdi varsa oluşturmuyor modified e geçiyor
            self.created = timezone.now()  # eğer girdi yoksa ona göre created date oluşturuyor

        self.modified = timezone.now()  # zaten girdisi olanı update etmek..

        return super(ImageUrun, self).save(*args, **kwargs)"""

That is my Problem


Solution

  • IF you have same problem, You can try to fix your static file path in PythonAnyWhere.

    Static File Path should be..

    I fixed my problem, PythonAnyWhere couldnt load static/css file.. And there are 2 option in the same page, JSON format and HTML format, When ı try to write JSON format, Html format being empty, and Django saying " that field requiret" When ı fix my css file path, JSON format and HTML format not in the same page. That is my solution about that problem, I fixed my DRF static file path in PythonAnyWhere.