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