DJANGO API POST : "This field is required."
DJANGO API POST : "This field is required."
我是一名刚毕业的软件工程师,想用Django写一个API。 api 给我这样的错误。我通过 PythonAnyWhere 发布。在Local中工作没有问题,但是在PythonAnyWhere中出现问题。
问题:“此字段是必需的。” .. 你能帮帮我吗?
我的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',
]
我的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)
我正在使用“class UrunListAPIView(ListCreateAPIView):”来创建新产品。当我尝试创建新产品时,DJANGO 说“此字段为必填项。”
****** 我的 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
如果你有同样的问题,你可以尝试在 PythonAnyWhere 中修复你的静态文件路径。
我解决了我的问题,PythonAnyWhere 无法加载 static/css 文件。在同一页面中有 2 个选项,JSON 格式和 HTML 格式,当我尝试编写时JSON 格式,Html 格式为空,Django 说“该字段要求”当我修复我的 css 文件路径时,JSON 格式和 HTML 格式不在同一页中。这是我对那个问题的解决方案,我在 PythonAnyWhere 中修复了我的 DRF 静态文件路径。
我是一名刚毕业的软件工程师,想用Django写一个API。 api 给我这样的错误。我通过 PythonAnyWhere 发布。在Local中工作没有问题,但是在PythonAnyWhere中出现问题。 问题:“此字段是必需的。” .. 你能帮帮我吗?
我的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',
]
我的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)
我正在使用“class UrunListAPIView(ListCreateAPIView):”来创建新产品。当我尝试创建新产品时,DJANGO 说“此字段为必填项。”
****** 我的 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
如果你有同样的问题,你可以尝试在 PythonAnyWhere 中修复你的静态文件路径。
我解决了我的问题,PythonAnyWhere 无法加载 static/css 文件。在同一页面中有 2 个选项,JSON 格式和 HTML 格式,当我尝试编写时JSON 格式,Html 格式为空,Django 说“该字段要求”当我修复我的 css 文件路径时,JSON 格式和 HTML 格式不在同一页中。这是我对那个问题的解决方案,我在 PythonAnyWhere 中修复了我的 DRF 静态文件路径。