Расшифровка идентификатора URL в django
Я пытался расшифровать Update URL id до зашифрованного формата в url.
на странице профиля пользователя есть одна кнопка редактирования, которая содержит url вида обновления.
# Страница моего профиля. код
def profile(request):
lst = request.user.id #This line is the problem
l=[]
for i in lst:
i['encrypt_key']=encrypt(i['id'])
i['id']=i['id']
l.append(i)
return render(request, 'profile.html', {'lst':l})
#Код представления обновления
def update(request, id):
id=decrypt(id)
#Update code.
return render(request, 'edit_profile.html', context)
На странице профиля для этой кнопки редактирования, поскольку это итеративный цикл for. Я закодировал вот так шаблон Html
<li class="ctx-item">
<button class="ctx-menu-btn icon-box">
<span class="material-symbols-rounded icon" aria-hidden="true">edit</span>
{% for x in lst %}
<span class="ctx-menu-text"><a href="/update/{{x.encrypt_key}}">Edit</a></span>
{% endfor %}
</button>
</li>
Поскольку в моей базе данных есть три пользователя, приходят три ссылки на редактирование. Чтобы ограничить их в представлении профиля, я должен изменить фильтрацию при извлечении пользователя в lst.
Если я ставлю request.user.id, то появляется следующая ошибка.
TypeError at /profile/
'int' object is not iterable
Пожалуйста, помогите мне исправить эту ошибку.
Ответ фильтрации:
def profile(request):
if request.user.is_authenticated:
lst = User.objects.filter(username=request.user).values('id') #working
l=[]
for i in lst:
i['encrypt_key']=encrypt(i['id'])
i['id']=i['id']
l.append(i)
return render(request, 'profile.html', {'lst':l})
else:
messages.error(request, 'Please Provide the credentials to Login to your account.')
return redirect("login")