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

Django中数据类型的对象不是JSON可序列化错误,django,django-rest-framework,Django,Django Rest Framework,我有一个注册页面,允许用户注册。这样做之后,我想调用一个API,然后将数据保存到我的模型中(而不是保存到表单中)。我试着这样做: 型号。py: class Profile(models.Model): user = models.OneToOneField(User, on_delete = models.CASCADE, primary_key=True, related_name = 'profile') address = models.TextField() bi

我有一个注册页面,允许用户注册。这样做之后,我想调用一个API,然后将数据保存到我的模型中(而不是保存到表单中)。我试着这样做:

型号。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)
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)
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
Object of type data is not JSON serializable error in Django
视图。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)
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)
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
Object of type data is not JSON serializable error in Django
序列化程序。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)
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)
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
Object of type data is not JSON serializable error in Django
但是,我遇到了这个错误:

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)
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)
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
Object of type data is not JSON serializable error in Django

看来这和生日有关。在我的模板上,用户可以将出生日期显示为“YYYY-MM-DD”。如何修复此错误?

您的
UserSerializer
中的
create
方法应该返回一个用户实例,而不是
validated\u数据

def-create(self、request、validated_数据、*args、**kwargs):
register\u data=validated\u data.pop('profile'))
password=validated_data.pop('password',None)
user=user.objects.create(**已验证的_数据)
如果密码不是“无”:
user.set_密码(password)
user.save()
Profile.objects.create(用户=用户,**注册数据)
返回用户

显示完整跟踪