【问题标题】:validate method not called django rest framework验证方法不称为 django rest 框架
【发布时间】: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


【解决方案1】:

当您调用serializer.is_valid() 时,将调用序列化程序的验证方法。由于您正在序列化数据库实例,因此不需要调用 is_valid(),因此不会调用 validate() 方法

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-29
    • 2017-09-26
    • 2017-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-07
    • 2019-02-09
    相关资源
    最近更新 更多