【问题标题】:Whle converting dict to serializer, serializer.is_valid always False in Django将 dict 转换为序列化程序时,Django 中的 serializer.is_valid 始终为 False
【发布时间】:2019-12-28 21:56:45
【问题描述】:

我的命令:

python manage.py shell
from user.models import UserInfo
from user.serializers import UserInfoSerializer
import io
from rest_framework.renderers import JSONRenderer
from rest_framework.parsers import JSONParser
u=UserInfo.objects.all()[0]
s=UserInfoSerializer(u)
j=JSONRenderer().render(s.data)
o=io.BytesIO(j)
d=JSONParser().parse(o)
s1=UserInfoSerializer(data=d)
s1.is_valid()

但这里的问题是 s1.is_valid() 总是 False 并且我无法将 s1 保存为序列化程序。 我收到此错误:

>>> d
{'username': 'user001', 'password': 'pass001', 'email': 'user001@example.com', 'contact': 9876543210}
>>> s001=UserInfoSerializer(data=d)
>>> s001.is_valid()
False
>>> s001.validated_data()
Traceback (most recent call last):
  File "<console>", line 1, in <module>
TypeError: 'dict' object is not callable
>>> s001.validated_data
{}
>>> s001.data
{'username': 'user001', 'password': 'pass001', 'email': 'user001@example.com', 'contact': 9876543210}
>>> s001.save()
Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "/home/imharjyotbagga/PycharmProjects/DRF/venv/lib/python3.7/site-packages/rest_framework/serializers.py", line 182, in save
    'You cannot call `.save()` on a serializer with invalid data.'
AssertionError: You cannot call `.save()` on a serializer with invalid data.
>>> 

那我该怎么办呢!?

【问题讨论】:

  • 您可以使用s001.errors 让序列化程序显示问题所在。
  • 你能粘贴你的序列化程序类吗?

标签: json django django-rest-framework active-model-serializers


【解决方案1】:

您需要显示.errors 属性才能尝试诊断问题。我的盲目猜测是您弄乱了密码字段。但是,除非您生成序列化程序、模型的代码,并且序列化程序的 .errors 也会非常有用,否则您不会得到任何明确的答案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-01
    • 2012-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-01
    • 1970-01-01
    相关资源
    最近更新 更多