기술을 입력 할 수있는 사용자 프로필을 설정하려고합니다. 스킬을 입력하고 데이터베이스에 저장하면 이미 작동합니다. 이제 버튼 클릭만으로 모든 사용자를 삭제할 수있는 기회를 제공하고 싶습니다. 나는 각 스킬의 ID를 URL에 클릭하여 올리려고 시도했는데 항목을 가져 와서 삭제하기 위해 내보기에서 읽었지 만 생각대로 작동하지 않고 이유를 찾지 못했습니다.Django - 버튼 클릭시 단일 데이터베이스 항목을 어떻게 삭제합니까?
MY VIEW
def profile_settings(request, id=None):
# get logged in user object from session
user_id = request.user.id
# get related userprofile
userprofile = UserProfile.objects.get(pk=user_id)
# get all skills of the userprofile
user_skills = Skill.objects.filter(user=userprofile)
if request.method == 'POST':
form = SkillForm(request.POST)
if 'delete-skill' in request.POST:
if id:
print(id)
skill = Skill.objects.get(pk=id).delete()
elif 'add-skill' in request.POST:
if form.is_valid():
# get data from form
name = form.cleaned_data['name']
category = form.cleaned_data['category']
rating = form.cleaned_data['rating']
# create new skill object for a user
new_skill = Skill(name=name, category=category, rating=rating, user=userprofile)
# save it in the database
new_skill.save()
else:
form = SkillForm()
return render(request, 'profile-settings.html', {'skillform': form, 'existing_skills': user_skills})
MY URL이
urlpatterns = [
url(r'^landing', views.landing, name='landing'),
url(r'^neuigkeiten', views.news, name='news'),
url(r'^profileinstellungen/', views.profile_settings, name='profileinstellungen'),
url(r'^profileinstellungen/(?P<id>\d+)/$', views.profile_settings, name='profileinstellungen'),
]
MY 템플릿
{% extends 'base.html' %}
{% block content %}
<form method="post" style="margin-top: 300px">
{% csrf_token %}
{{ skillform }}
<input type="submit" value="Hinzufügen" name="add-skill "/>
</form>
<form method="post">
{% csrf_token %}
<ul>
{% for skill in existing_skills %}
<li>{{ skill.name }}</li>
<input href="{% url 'profileinstellungen' id=skill.id%}" type="submit" value="Löschen" name="delete-skill"/>
{% endfor %}
</ul>
</form>
{% endblock %}
그것은 URL에서 기술의 ID를 게시하지 않습니다. 다른 접근법이 있습니까?
특정 오류가 발생 했습니까? –
음, 삭제 버튼을 클릭하면 스킬의 ID가 URL에 전달되지 않으므로 아무 일도 일어나지 않습니다 ... – Marco