ModelFormset的Django删除按钮操作
我有一个modelformset,如下所示: 视图.pyModelFormset的Django删除按钮操作,django,django-models,django-forms,django-templates,django-views,Django,Django Models,Django Forms,Django Templates,Django Views,我有一个modelformset,如下所示: 视图.py def manage_authors(request): AuthorFormSet = modelformset_factory(Author, fields=('name', 'title', 'birth_date')) if request.method == 'POST': if "del_btn" in request.POST: query = Author.objec
def manage_authors(request):
AuthorFormSet = modelformset_factory(Author, fields=('name', 'title', 'birth_date'))
if request.method == 'POST':
if "del_btn" in request.POST:
query = Author.objects.get(...).delete()
formset = AuthorFormSet(request.POST, request.FILES)
if formset.is_valid():
formset.save()
formset = AuthorFormSet(queryset=Author.objects.all())
print "yes"
else:
formset = AuthorFormSet(request.POST, request.FILES)
if formset.is_valid():
formset.save()
formset = AuthorFormSet(queryset=Author.objects.all())
else:
formset = AuthorFormSet(queryset=Author.objects.all())
return render(request, "manage_authors.html", {"formset": AuthorFormSet, })
管理作者.html
<form method="post" action="/manage_authors.html">{% csrf_token %}
{{ formset.management_form }}
{% for form in formset %}
{{ form.id }}
<ul>
{{ form.name }} {{ form.title }} {{ form.birth_date }}
<input type="submit" name="del_btn" value="Delete"/>
</ul>
{% endfor %}
<input type='submit' name="edit_btn" value='Edit / Add'/>
{%csrf\u令牌%}
{{formset.management_form}
{formset%中表单的%s}
{{form.id}
{{form.name}{{form.title}{{{form.birth\u date}}
{%endfor%}
我可以定义什么查询以便“删除”按钮可以工作
现在,我不知道必须删除哪一行
提前感谢首先,我建议您在admin.py中注册您的用户模型:
admin.site.register(Author)
剩下的就交给Django了
但如果您想使用此代码执行此操作,请执行以下操作:
<form method="post" action="/manage_authors.html">{% csrf_token %}
{{ formset.management_form }}
for form in formset %}
{{ form.id }}
<ul>
{{ form.name }} {{ form.title }} {{ form.birth_date }}
<input type="submit" name="del_btn{{ form.instance.id }}" value="Delete"/>
</ul>
{% endfor %}
<input type='submit' name="edit_btn" value='Edit / Add'/>
我没有使用{{form.id},而是使用了{{form.instance.id},效果很好。重要的是将{{form.id}}添加到模板中,这样就不会抛出多值dictKeyError。谢谢你,尤干达
import re, urllib
def manage_authors(request):
AuthorFormSet = modelformset_factory(Author, fields=('name', 'title', 'birth_date'))
if request.method == 'POST':
enurl=urllib.urlencode(request.POST) # To convert POST into a string
matchobj=re.search(r'del_btn\d', enurl) # To match for e.g. del_btn1
btnname=matchobj.group() # Contains matched button name
pri_key=btname[-1] # slice the number of btn to identify primarykey
if matchobj:
query = Author.objects.get(pk=pri_key).delete()
formset = AuthorFormSet(request.POST, request.FILES)
if formset.is_valid():
formset.save()
formset = AuthorFormSet(queryset=Author.objects.all())
print "yes"
else:
formset = AuthorFormSet(request.POST, request.FILES)
if formset.is_valid():
formset.save()
formset = AuthorFormSet(queryset=Author.objects.all())
else:
formset = AuthorFormSet(queryset=Author.objects.all())
return render(request, "manage_authors.html", {"formset": AuthorFormSet, })