RelatedObjectDoesNotExist в /users/edit/ У пользователя нет профиля
Я столкнулся с ситуацией, когда я разработал метод под названием edit и передавал в него формы профиля и пользователя, когда я хотел изменить профиль.
@login_required
def edit(request):
if request.method == 'POST':
user_form = UserEditForm(instance=request.user,data=request.POST)
profile_form = ProfileEditForm(instance=request.user.profile,data=request.POST,files=request.FILES)
if user_form.is_valid() and profile_form.is_valid():
user_form.save()
profile_form.save()
else:
user_form = UserEditForm(instance=request.user)
profile_form = ProfileEditForm(instance=request.user.profile)
return render(request,'users/edit.html',{'user_form':user_form,'profile_form':profile_form})
вот мой views.py, в котором я написал логику
и переходим к urls.py
path('edit/',views.edit,name='edit'),
и код edit.html выглядит следующим образом
{% extends 'users/base.html' %}
{% block body %}
<h2>Edit profile form</h2>
<form method="post" enctype="multipart/form-data">
{% csrf_token %}
{{ user_form.as_p }}
{{ profile_form.as_p }}
<input type="submit"/>
</form>
{% endblock %}
Это мой файл models.py
from django.db import models
from django.conf import settings
# Create your models here.
class Profile(models.Model):
user = models.OneToOneField(settings.AUTH_USER_MODEL,on_delete=models.CASCADE)
photo = models.ImageField(upload_to='users/%Y/%m/%d',blank=True)
def __str__(self):
return self.user.username
Основной проект urls.py
from django.contrib import admin
from django.urls import path,include
from django.conf.urls.static import static
from django.conf import settings
urlpatterns = [
path('admin/', admin.site.urls),
path('users/',include('users.urls'))
]
urlpatterns += static(settings.MEDIA_URL,document_root=settings.MEDIA_ROOT)
вывод показывает следующее
Я ожидаю лучшего решения для устранения этой проблемы
Это означает, что для этого пользователя не существует экземпляра модели Profile. Вы можете использовать сигналы django postsave для создания экземпляра модели Profile для любого пользователя, который был создан.
Чтобы проверить это, используйте страницу администратора для создания экземпляра модели Profile для этого пользователя и проверьте, выдает ли она ошибку.
Надеюсь, это поможет.