我进行了更改UpdateView
,以便它也可以处理创建请求,如果pk=0
:
class ObjectView(UpdateView):
def get_object(self, queryset=None):
if self.kwargs.get(self.pk_url_kwarg) == 0:
return None
return super().get_object(queryset)
def form_valid(self, form):
if self.request.htmx:
return self.render_to_response(self.get_context_data(form=form))
return redirect(self.object.get_absolute_url())
我View
正在检查字段是否price
已更新,如果是,price_date
也更新该字段:
class PartView(ObjectView):
model = Part
form_class = PartForm
def form_valid(self, form):
if self.object:
old = Part.objects.get(id=self.object.id)
self.object = form.save(commit=False)
if self.object.price != old.price:
self.object.price_date = date.today()
self.object.save()
else:
self.object = form.save()
return super().form_valid(form)
我htmx
从我的模板调用它:
<div hx-target="this">
<form method="post"
hx-post="{{ hx_url }}"
hx-on:htmx:validation:failed="this.reportValidity()"
hx-trigger="click from:#btn-save">
{% csrf_token %}
{{ form.price }}
{{ form.price_date }}
</form>
{% include "btn_save.html" %}
</div>
问题是,即使它成功更新了price_date
数据库中的内容,它仍然会返回具有旧值的表单,现在如果我再次按“保存”,它将覆盖之前的更改。为什么会发生这种情况?