簡體   English   中英

<> 類型的對象不是 JSON 可序列化的

[英]Object of type <> is not JSON serializable

我正在使用 Django 運行一個網站。 這是views.py:

def signup(request):
    registered=False
    failed_ref=False
    wrong_ref=False
    if request.method=='POST':
        if 'city' in request.POST:
            user_form = UserForm(data=request.POST)
            profile_form = ProfileForm(data=request.POST)
            if user_form.is_valid() and profile_form.is_valid():
                user = user_form.save()
                user.set_password(user.password)
                user.save()
                profile = profile_form.save(commit=False)
                profile.user = user
            else:
                print(user_form.errors,profile_form.errors)
    else:
         profile_form=ProfileForm()
    return JsonResponse({'profile_form':profile_form,'registered':registered,
                                                    'failed_ref':failed_ref,'wrong_ref':wrong_ref},safe=False)

當我嘗試獲取 Json Response 時,我得到了

ProfileForm 類型的對象不是 JSON Serializable

我的ProfileForm()

class ProfileForm(forms.ModelForm):

class Meta:
    model=Profile
    widgets = {
        'address_line_1': forms.TextInput(attrs={'placeholder': 'Door No,Building'}),
        'address_line_2': forms.TextInput(attrs={'placeholder': 'Area,Locality'}),
    }
    fields=('first_name','last_name','mobile_no','email','address_line_1','address_line_2','postal_code','city','country','image','referral_contact','promo_coupon','ic')

如何為此獲得 JSON 響應?

您需要序列化數據。

從 django.core 導入序列化程序

data = serializers.serialize('xml', Profile.objects.all(), fields=('first_name','last_name','mobile_no','email','address_line_1','address_line_2','postal_code','city','country','image','referral_contact','promo_coupon','ic'))

表單類不是 JSON Serializable,您應該使用cleaned_data

def signup(request):
    registered = False
    failed_ref = False
    wrong_ref = False
    if request.method == 'POST':
        if 'city' in request.POST:
            user_form = UserForm(data=request.POST)
            profile_form = ProfileForm(data=request.POST)
            if user_form.is_valid() and profile_form.is_valid():
                user = user_form.save()
                user.set_password(user.password)
                user.save()
                profile = profile_form.save(commit=False)
                profile.user = user
                # use cleaned_data
                profile_form.cleaned_data['user'] = user_form.cleaned_data
            else:
                print(user_form.errors, profile_form.errors)
    else:
        profile_form = ProfileForm()
    return JsonResponse(
        {
            'profile_form': profile_form.cleaned_data,
            'registered': registered,
            'failed_ref': failed_ref,
            'wrong_ref': wrong_ref
        },
        safe=False)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM