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': 错误}
正在将表单保存到数据库,但我不知道如何从数据库中删除标记的表单。
我将不胜感激。
我用 models.py
中的模型制作了 modelformset_factory
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 函数中添加了:
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 看起来像这样:
<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">
我个人不必这样做,但从文档来看,您似乎有几个选择。
在表单集而不是每个表单上调用保存。
if formset.is_valid():
formset.save()
如果你必须遍历每个表单,你可以这样。
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()
分别循环删除的表单。
if formset.is_valid():
forms = formset.save(commit=False)
for object in formset.deleted_objects:
object.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': 错误}
正在将表单保存到数据库,但我不知道如何从数据库中删除标记的表单。
我将不胜感激。
我用 models.py
中的模型制作了 modelformset_factoryclass 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 函数中添加了:
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 看起来像这样:
<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">
我个人不必这样做,但从文档来看,您似乎有几个选择。
在表单集而不是每个表单上调用保存。
if formset.is_valid(): formset.save()
如果你必须遍历每个表单,你可以这样。
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()
分别循环删除的表单。
if formset.is_valid(): forms = formset.save(commit=False) for object in formset.deleted_objects: object.delete()