TypeError: Объект типа DeferredAttribute не является JSON сериализуемым
В процессе тестирования своего проекта я обнаружил странную ошибку: Object of type DeferredAttribute is not JSON serializable...
Прежде чем перейти к ошибке, я хочу рассказать, что я хотел: Шаг 1: Зарегистрированный пользователь делится своим референтным кодом с другим человеком. Шаг 2: Незарегистрированный пользователь вводит код в ссылку. Шаг 3: Браузер показывает кнопку для продолжения создания аккаунта
Это urls.py файл
from django.contrib import admin
from django.urls import path, include
from core import views
urlpatterns = [
path('admin/', admin.site.urls),
path('', views.home),
path('<str:code>/', views.home),
path('accounts/', include('accounts.urls')),
# path('', include('accounts.urls')),
]
Это views.pyфайл
from django.shortcuts import render
from accounts.models import Refer
def home(request, *args, **kwargs):
code = str(kwargs.get('code'))
try:
user = Refer.objects.get(referral_code = code)
print(user.referral_code)
request.session['ref_profile'] = Refer.id
print('id', user.id)
except:
pass
print(request.session.get_expiry_date())
return render(request, 'accounts/registration.html')
Простой home.html файл
{% extends 'base.html' %}
{% block title %}
home
{% endblock title %}
{% block bodycontent %}
{% if user.is_authenticated %}
{{user}}
{% else %}
<p>
"Hello Everyone"
</p>
<button class="btn btn-primary"><a href="{% url 'accounts:registration' %}">Create New User</a></button>
{% endif %}
{% endblock bodycontent %}
После возврата заявления о печати в терминале
de829fab192047
id 1
2022-01-24 05:40:09.783734+00:00
Internal Server Error: /de829fab192047/
Traceback (most recent call last):
Я получил это на веб-странице
В представлении home
вы пытаетесь сохранить определение поля модели (Refer.id
) вместо фактического значения извлекаемого объекта id
. Просто замените Refer
на user
во второй строке:
user = Refer.objects.get(referral_code = code)
request.session['ref_profile'] = user.id