Создайте запись модели один-к-одному или обновите ее, если она уже существует, в этом представлении Django

Модель

UserComputedInfo имеет связь один-к-одному с моделью CustomUser. Я хочу обновить или создать запись в UserComputedInfo во время обновления формы в CustomUser. Мне удалось создать/обновить запись в views.py

Вот код;

from .models import UserComputedInfo    
def profile(request, username):
        if request.method == "POST":
            user = request.user
            form = UserUpdateForm(request.POST, request.FILES, instance=user)
            if form.is_valid():
                user_form = form.save()
                # How to save post_code to copy_input in UserComputedInfo model
                user_computed_info_instance = UserComputedInfo(user_id=user.id)
                user_computed_info_instance.latitude = 1.18 # or whatever value to be assigned
                user_computed_info_instance.save()
    
                messages.success(request, f'{user_form.username}, Your profile has been updated!')
                return redirect("profile", user_form.username)
    
        return redirect("homepage")

Это вопрос в продолжение ошибочного ответа, который я разместил на свой же прошлый вопрос. Сохранение значений в другую таблицу базы данных с отношением один-к-одному в Django во время обновления формы

Ответ работает в первый раз, когда создается новая запись. Однако он не срабатывает во второй раз, когда выполняется profile(), потому что уже есть существующая запись.

Как изменить profile() так, чтобы при отсутствии существующей записи создавалась новая, а при наличии уже существующей - обновлялась?

Я использую Django v4, python v3.9, sqlite database на Windows 10

Вы можете использовать метод модели Django get_or_create, оставив остальную логику нетронутой.

 user_computed_info_instance, created  = UserComputedInfo.objects.get_or_create(user_id=user.id)

В первый раз он создаст объект, но в следующий раз получит существующий объект для того же id.

Вернуться на верх