Создайте запись модели один-к-одному или обновите ее, если она уже существует, в этом представлении 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.