django - Django UpdateWithInlinesView 不保存已删除的内联
问题描述
我正在使用 jQuery 插件(由 elo80ka 提供)从模板中添加和删除内联。我遇到的问题是当我添加新数据时一切顺利并且数据被保存。但是,一旦我尝试删除现有的,我就会得到一个没有删除对象的重定向。(一旦我点击删除,内联就会被删除,我已经通过 Inspector 进行了检查)
class PlaceUpdateInline(InlineFormSetFactory):
model = AdditionalLoadingPlace
form_class = AdditionalLoadingPlaceInlineFormSet
factory_kwargs = {'extra': 0, 'max_num': 5,
'can_order': False, 'can_delete': True}
class PlaceUpdateView(LoginRequiredMixin, UpdateWithInlinesView):
model = Place
form_class = PlaceCreateForm
inlines = [PlaceUpdateInline]
def forms_valid(self, form, inlines):
form.instance.author = self.request.user
self.object = form.save(commit=False)
self.object.author = self.request.user
form.save(commit=True)
for inline in inlines:
objects = inline.save(commit=False)
for obj in inline.deleted_objects:
# never called
obj.delete()
for object in objects:
if object.place:
object.save()
return HttpResponseRedirect(self.get_success_url())
编辑:
所以,我的模板对每个字段都有这个自定义呈现:
{{ inlines.0.management_form }}
{{ inlines.0.non_form_errors }}
{% for form in inlines.0 %}
<div class="inline {{ inlines.0.prefix }}">
{{ form.hidden_field.as_hidden }}
{{ form.place.errors }}
{{ form.place }}
{{ form.id }}
</div>
{% endfor %}
但是如果我这样做,删除就可以了:
{{ inlines.0.management_form }}
{{ inlines.0.non_form_errors }}
{% for form in inlines.0 %}
<div class="inline {{ inlines.0.prefix }}">
{{ form.as_p }}
</div>
{% endfor %}
我的隐藏字段似乎有问题(我稍后用 jQuery 更新,我不想向用户展示)
解决方案
无论如何,我的模板中似乎遗漏了一些东西并且它没有正确渲染(我猜)。所以我最终这样做了:
{% for field in form.hidden_fields %}
{{ field }}
{% endfor %}
{% for field in form.visible_fields %}
{{ field }}
{% endfor %}
并且还让我的字段从表单中隐藏:
class PlaceInlineFormSet(ModelForm):
class Meta:
model = AdditionalLoadingPlace
fields = ('hidden_field', 'place')
widgets = {
'place' : forms.TextInput(),
'hidden_field': forms.HiddenInput(),
}
推荐阅读
- node.js - Angular 和 Node.js:获取调用解析数据到对象
- javascript - 回调函数以某种方式返回未定义
- ios - 快速表格视图单元格不允许我使用 indexPath.row
- angular - Promise 或然后 onAuthStateChanged 函数
- android - 如何在约束布局中水平匹配两个元素?
- hyperledger-fabric - Hyperledger Fabric-找不到链码错误
- wpf - Wpf ContextMenu MenuItem 标题绑定
- android - 用于显示聊天列表:按请求值为 false 的子时间戳排序
- javascript - Jquery中的行总和
- hyperledger-composer - 从 Composer 创建频道的选项