Модель не сохраняет маркер обновления
Просто пытаюсь сохранить маркер обновления из Google OAuth 2.0 в профиль абстрактного пользователя, который вошел в систему. Он правильно отображает маркер обновления и пользователя. Однако при входе в систему у пользователя нет маркера обновления, сохраненного в модели.
pipeline.py:
from .models import Profile
def save_token(user,*args,**kwargs):
extra_data = user.social_auth.get(provider="google-oauth2").extra_data
print(extra_data["refresh_token"],user)
Profile.objects.get_or_create(
username=user, defaults={"refresh_token": extra_data["refresh_token"]}
)
models.py
from django.db import models
from django.contrib.auth.models import AbstractUser
from phonenumber_field.modelfields import PhoneNumberField
from django.templatetags.static import static
class Profile(AbstractUser):
refresh_token = models.CharField(max_length=255, default="")
Теперь при его отображении появляется пустое место.
calendar.html:
{% block content %}
{{user.refresh_token}}
<h1>Calendar</h1>
<button>+</button>
<ul>
{% for result in results %}
<li>{{result.start.date}}{% if result.end.date %}-{% endif%}{{result.end.date}}: {{result.summary}}</li>
{% endfor %}
</ul>
{% endblock %}
Метод queryset get_or_create не обновляет значения в модели, он только создает новый объект, если он не существует. Если вы пытаетесь обновить значения в существующем объекте, вам следует использовать второе значение, которое возвращает get_or_create, чтобы подтвердить, что он уже существует, и сделать необходимые обновления.
Таким образом, корректировка будет выглядеть следующим образом:
def save_token(user,*args,**kwargs):
extra_data = user.social_auth.get(provider="google-oauth2").extra_data
profile, created = Profile.objects.get_or_create(
username=user, defaults={"refresh_token":
extra_data["refresh_token"]}
)
# `created` will be false if the object exists
if not created:
profile.refresh_token = extra_data["refresh_token"]
profile.save()