简体   繁体   English

类型数据的对象不是 Django 中的 JSON 可序列化错误

[英]Object of type data is not JSON serializable error in Django

I have a registration page that allows a user to sign up.我有一个允许用户注册的注册页面。 After doing so, I want to call an API and then, save the data to my model (not saving it to a form though).这样做之后,我想调用一个 API,然后将数据保存到我的模型中(但不是将其保存到表单中)。 I tried doing this:我尝试这样做:

models.py:模型.py:

class Profile(models.Model):
    user = models.OneToOneField(User, on_delete = models.CASCADE, primary_key=True, related_name = 'profile')
    address = models.TextField()
    birthday = models.DateField()

    def __str__(self):
        return str(self.user)

views.py:视图.py:

def signup(request):
    if request.method == 'POST':
        user_form = UserForm(request.POST)
        register_form = RegisterForm(request.POST)
        if user_form.is_valid() and register_form.is_valid():
            username = user_form.cleaned_data.get('username'),
            first_name = user_form.cleaned_data.get('first_name'),
            last_name=user_form.cleaned_data.get('last_name'),
            email=user_form.cleaned_data.get('email'),
            password=user_form.cleaned_data.get('password2'),
            birthday = register_form.cleaned_data.get('dob'),
            address=register_form.cleaned_data.get('address'),
            payload = {'username': username,'first_name': first_name,'last_name': last_name,'email':email,'password':password,'register' : {'birthday': birthday,'address': address}}
            response = requests.post('http://127.0.0.1:8000/my_api/',json=payload)
            return redirect("home") #re-direct if login is successful
    else:
        user_form = UserForm()
        register_form = RegisterForm()
    return render(request, 'users/register.html', {'user_form': user_form, 'register_form': register_form})

class RegisterAPI(APIView):
    permission_classes = [AllowAny]
    def post(self, request, format=None):
        serializer = UserSerializer(data=request.data)
        if serializer.is_valid():
            serializer.save()
            content = {'status': 'You are registered'}
            return Response(content, status=status.HTTP_201_CREATED)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

serializers.py:序列化程序.py:

from users.models import Profile
from django.contrib.auth.models import User

class ProfileSerializer(serializers.ModelSerializer):
    birthday = serializers.DateField(format="%Y-%m-%d")
    class Meta:
        model = Profile
        fields = ('birthday','address')

class UserSerializer(serializers.ModelSerializer):
    profile = ProfileSerializer()

    class Meta:
        model = User
        fields = ('username','first_name','last_name','email', 'password', 'profile')

    def create(self, request, validated_data, *args, **kwargs):
        register_data = validated_data.pop('profile')
        password = validated_data.pop('password', None)  
        user = User.objects.create(**validated_data)
        if password is not None:
            user.set_password(password)
        user.save()  
        Profile.objects.create(user = user, **register_data) 
        return validated_data

However, I am getting this error:但是,我收到此错误:

Object of type data is not JSON serializable error in Django

It seems that it's got to do with the birthday.好像和生日有关。 On my template, a user can display the date of birth as 'YYYY-MM-DD'.在我的模板上,用户可以将出生日期显示为“YYYY-MM-DD”。 How can I fix this error?我该如何解决这个错误?

The create method in your UserSerializer should return a User instance instead of validated_data . UserSerializercreate方法应该返回一个 User 实例而不是validated_data

def create(self, request, validated_data, *args, **kwargs):
   register_data = validated_data.pop('profile')
   password = validated_data.pop('password', None)  
   user = User.objects.create(**validated_data)
   if password is not None:
       user.set_password(password)
   user.save()  
   Profile.objects.create(user = user, **register_data) 
   return user

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 十进制类型的 Object 不是 Django 中的 JSON 可序列化错误 - Object of type decimal is not JSON serializable error in Django Django Rest Framework序列化错误:类型类型的对象不可JSON序列化 - Django Rest Framework serialization error: Object of type type is not JSON serializable Django Rest Framework-类型'type'的对象不是json可序列化错误 - Django Rest Framework - object of type 'type' is not json serializable error 错误:对象不是JSON可序列化的Django - Error : object is not JSON serializable Django Django-Decimal类型的对象不可JSON序列化,并在视图中转换为模型数据 - Django - Object of type Decimal is not JSON serializable and convert to model data in views TypeError:在 Django 数据迁移期间,十进制类型的 Object 不是 JSON 可序列化的 - TypeError: Object of type Decimal is not JSON serializable during Django data migration 获取错误:用户类型的对象在 django python 中不是 JSON 可序列化的 - Getting error : Object of type User is not JSON serializable in django python 在 django 中获取字节类型的错误对象不是 JSON 可序列化的 - Getting Error Object of type bytes is not JSON serializable in django Django 登录错误 TypeError: Object of type User is not JSON 可序列化 - Django Login error TypeError: Object of type User is not JSON serializable QuerySet 类型的 Object 不是 JSON 可序列化 Django Z0ECD11C1D7A287401FZD148A - Object of type QuerySet is not JSON serializable Django JSON
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM