Django modelformset_factory删除由can_delete标记的对象 [英] Django modelformset_factory deleting objects marked by can_delete
问题描述
您好,我有一个问题,我已经制作了modelformset_factory,并且在选项中选择了can_delete = True,现在我不知道如何删除标记为 DELETE的对象:True可以从数据库中删除它们。我试图以某种方式做到这一点,但没有奏效。我也在Django formsetmodels文档中寻找它,但这并没有帮助我。使用此选项can_delete = True,我会在html页面中获得其他复选框删除并标记他仅在控制台上打印我:
{'username':'sw','email':'a@gmail.com' ,'city':'ss','code':12345,'id':,'DELETE':False}
Hello I have got question I have made modelformset_factory and in options I have choosen can_delete = True and now I don't know how to delete marked objects as 'DELETE' : True to delete them from database. I was trying to do this in some ways and it didnt work. I was looking for it also in django formsetmodels documentation but this didnt help me. With this option can_delete = True I get additional checkbox in my html page Delete and marking him only prints me in console on print: {'username': 'sw', 'email': 'a@gmail.com', 'city': 'ss', 'code': 12345, 'id': , 'DELETE': False}
将表格保存到数据库中是可行的,但我没有知道如何从数据库中删除标记的表单。
Saving forms to database is working but I dont know how to delete marked forms from database.
我将非常感谢每一个帮助。
I would be very thankful for every help.
我有从models.py
I have made modelformset_factory from model in models.py
class TestModel(models.Model):
username = models.CharField(max_length=120)
email = models.EmailField()
city = models.CharField(max_length=120)
code = models.IntegerField()
#W admin panelu za miast TestModel object bedzie username
def __str__(self):
return self.username
然后在我的views.py函数中添加:
Then I have added in my views.py function:
def django_modelformset(request):
TestModelFormset = modelformset_factory(TestModel, fields=['username', 'email', "city",
"code"], extra=1, can_delete=True)
formset = TestModelFormset(request.POST or None)
if formset.is_valid():
for form in formset:
print(form)
print(form.cleaned_data)
form.save()
context = {"formset": formset}
return render(request, "modelformset.html", context)
我的modelformset.html看起来像这样:
My modelformset.html looks like this:
<form method="POST" action="">
{% csrf_token %}
{{ formset.management_form}}
{% for form in formset %}
<div>
{{ form.as_p }}
<hr/>
</div>
{% endfor %}
<input type="submit" value="Save">
推荐答案
我个人没有必要这样做,但是从文档看来,您有几种选择。
I haven't personally had to do this, but from the docs it seems you have a few options.
-
在表单集而不是每个表单上调用保存。
Call save on the formset instead of each form.
if formset.is_valid():
formset.save()
如果必须遍历每种形式,则可能会这样。
If you must loop through each form you could something like this.
if formset.is_valid():
for form in formset:
print(form.cleaned_data)
if form.cleaned_data["DELETE"]:
# Do what you want with the form data
# i.e. get the object from the database and delete it.
else:
form.save()
通过
Loop through the deleted forms separately.
if formset.is_valid():
forms = formset.save(commit=False)
for object in formset.deleted_objects:
object.delete()
这篇关于Django modelformset_factory删除由can_delete标记的对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!