Django CRUD работает, но неверный путь
@login_required(login_url='/users/login')
@permission_required('users.change_user', login_url='users/login')
def edit(request, profile_id):
try:
user = User.objects.get(pk=profile_id)
except User.DoesNotExist:
raise Http404("Profile does not exist")
return render(request, 'UI/edit.html', {'users': user})
def processedit(request, profile_id):
user = get_object_or_404(User, pk=profile_id)
profile_pic = request.FILES.get('image')
try:
fname = request.POST.get('fname')
lname = request.POST.get('lname')
email = request.POST.get('email')
position = request.POST.get('position')
except (KeyError, User.DoesNotExist):
return render(request, 'UI/detail.html', {'user': user, 'error_message': "Problem updating record"})
else:
user_profile = User.objects.get(id=profile_id)
user_profile.user_fname = fname
user_profile.user_lname = lname
user_profile.user_email = email
user_profile.user_position = position
if profile_pic:
user_profile.user_image = profile_pic
user_profile.save()
return HttpResponseRedirect(reverse('users:detail', args=(profile_id,)))
из файла views.py
здесь из edit.html
{% extends 'base.html' %}
{% block title %}
{{ user.user_fname }} {{ user.user_lname }}
{% endblock %}
{% block content %}
{% if error_message %}
<p class="alert alert-danger">
<strong>{{error_message}}</strong>
</p>
{% endif %}
<h1> Edit User Profile</h1>
<form action="{% url 'users:processedit' user.id %}" method="post" enctype="multipart/form-data">
{% csrf_token %}
<div class="form-group">
<label>First Name</label>
<input type="text" name="fname" id="fname" class="form-control" required value="{{ users.user_fname }}">
</div>
<div class="form-group">
<label>Last Name</label>
<input type="text" name="lname" id="lname" class="form-control" required value="{{ users.user_lname }}">
</div>
<div class="form-group">
<label>Email</label>
<input type="text" name="email" id="email" class="form-control" required value="{{ users.user_email }}">
</div>
<div class="form-group">
<label>Position</label>
<input type="text" name="position" id="position" class="form-control" required value="{{ users.user_position }}">
</div>
<div class="form-group"><br>
<label>User Image</label><br><br>
<input type="file" name="image" id="image">
</div>
<br>
<button type="submit" class="btn btn-primary mt-2">Update</button>
</form>
{% endblock %}
Когда я пытаюсь редактировать, он редактирует первого пользователя из базы данных, а не выбранного пользователя, ошибка не появляется, он работает, но неверный маршрут/путь
Как мне это исправить? До этого все работало правильно.
Я создал двух пользователей, оба со статусом super и staff, это тоже нормально?
В настоящее время я снова ищу/отлаживаю
Создан новый пользователь, данные уникальны, теперь, когда я обновляю его, он говорит следующее
IntegrityError at /users/1/processedit/
вы допустили ошибку в контекстной переменной.
@login_required(login_url='/users/login')
@permission_required('users.change_user', login_url='users/login')
def edit(request, profile_id):
user = get_object_or_404(User, pk=profile_id)
return render(request, 'UI/edit.html', {'user': user})
Замените "users" на "user" в вашем контексте рендеринга, я думаю, это будет лучше.
И вы должны унифицировать переменную в вашем шаблоне:
{% extends 'base.html' %}
{% block title %}
{{ user.user_fname }} {{ user.user_lname }}
{% endblock %}
{% block content %}
{% if error_message %}
<p class="alert alert-danger">
<strong>{{error_message}}</strong>
</p>
{% endif %}
<h1> Edit User Profile</h1>
<form action="{% url 'users:processedit' user.id %}" method="post" enctype="multipart/form-data">
{% csrf_token %}
<div class="form-group">
<label>First Name</label>
<input type="text" name="fname" id="fname" class="form-control" required value="{{ user.user_fname }}">
</div>
<div class="form-group">
<label>Last Name</label>
<input type="text" name="lname" id="lname" class="form-control" required value="{{ user.user_lname }}">
</div>
<div class="form-group">
<label>Email</label>
<input type="text" name="email" id="email" class="form-control" required value="{{ user.user_email }}">
</div>
<div class="form-group">
<label>Position</label>
<input type="text" name="position" id="position" class="form-control" required value="{{ user.user_position }}">
</div>
<div class="form-group"><br>
<label>User Image</label><br><br>
<input type="file" name="image" id="image">
</div>
<br>
<button type="submit" class="btn btn-primary mt-2">Update</button>
</form>
{% endblock %}