Модель не сохраняет маркер обновления

Просто пытаюсь сохранить маркер обновления из 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()
Вернуться на верх