【发布时间】:2021-04-17 01:50:22
【问题描述】:
我正在尝试在 modelSerializer 上测试 validate method,但它是 NOT CALLED。
为什么不工作?我错过了什么吗?相同的场景适用于不同的项目
在网址
urlpatterns = [ path('api/allposts/', allposts, name='allposts') ]
观看次数:
from .serializer import PostSerializer
from rest_framework.renderers import JSONRenderer
from .models import Post
from django.http import JsonResponse
import json
def allposts(request):
qs = Post.objects.all()[:3]
ser = PostSerializer(qs, many=True)
data = JSONRenderer().render(ser.data)
return JsonResponse(json.loads(data), safe=False)
在模型中
class Post(models.Model):
title = models.CharField(max_length=100)
url = models.URLField()
poster = models.ForeignKey(User, on_delete=models.CASCADE, related_name='posts')
created = models.DateTimeField(auto_now_add=True)
class Meta:
ordering = ['-created']
def __str__(self):
return self.title
在序列化器中
from rest_framework import serializers
from .models import Post
class PostSerializer(serializers.ModelSerializer):
class Meta:
model = Post
fields = ['title', 'poster', 'url']
def validate(self, data):
if 'facebook' in data.get('url'):
raise serializers.ValidationError('you can not add facebook')
return data
【问题讨论】:
-
在调用 serializer.is_valid() 时会调用序列化程序的 validate 方法。由于您正在序列化数据库实例,因此不需要调用 is_valid(),因此不会调用 validate() 方法
-
@Vikramark 是的,我知道了,谢谢
标签: python django rest django-rest-framework