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)"""
IF you have same problem, You can try to fix your static file path in PythonAnyWhere.
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.