为什么 FormView 不在 DetailView 中保存数据?
Why FormView not saving data within a DetailView?
我有一个基于模型 (A) 的 DetailView,在同一模板上我有一个来自模型 B 的 ModelFormView,它具有模型 (A) 的 FK
表单中的数据没有保存到数据库中。
这是 DetailView:
class LocationView(DetailView):
template_name = "base/stocks/location.html"
model = LocationStock
def get_context_data(self, **kwargs):
context = super(LocationView, self).get_context_data(**kwargs)
context['form'] = OutsModelForm
return context
def get_object(self):
id_ = self.kwargs.get("id")
return get_object_or_404(LocationStock, id=id_)
这是FormView:
class OutsAdd(FormView):
form_class = OutsModelForm
success_url = reverse_lazy('base:dashboard')
def form_valid(self, form):
return super().form_valid(form)
这是url.py:
path('locations/<int:id>', LocationView.as_view(), name='location-detail'),
path('locations/outs', require_POST(OutsAdd.as_view()), name='outs-add'),
这是模板:
<form method="POST" action="{% url 'outs-add' %}" >
<div class="modal-content">
{% csrf_token %}
{% render_field form.quantity placeholder="Quantity"%}
{% render_field form.id_year placeholder="Year"%}
{% render_field form.id_location placeholder="ID Location"%}
</div>
<div class="modal-footer">
<input class="modal-close waves-effect waves-green btn-flat" type="submit" value="Save">
</div>
</form>
数据已在 /locations/outs 中发布,但未保存到实际 database.How 我可以保存吗?
Django 的 FormView
功能实际上只是为了在 GET 请求中显示表单,在 form_invalid
的情况下显示表单错误,并重定向到新的 URL如果表格有效。为了将数据持久保存到数据库中,您有两种选择。首先,您可以简单地在 FormView
:
中调用 form.save()
class OutsAdd(FormView):
form_class = OutsModelForm
success_url = reverse_lazy('base:dashboard')
def form_valid(self, form):
form.save()
return super().form_valid(form)
或者,您可以使用通用 CreateView
。 Django 的 CreateView
与 FormView
类似,只是它假设它使用 ModelForm
并在幕后为您调用 form.save()
。
我有一个基于模型 (A) 的 DetailView,在同一模板上我有一个来自模型 B 的 ModelFormView,它具有模型 (A) 的 FK
表单中的数据没有保存到数据库中。
这是 DetailView:
class LocationView(DetailView):
template_name = "base/stocks/location.html"
model = LocationStock
def get_context_data(self, **kwargs):
context = super(LocationView, self).get_context_data(**kwargs)
context['form'] = OutsModelForm
return context
def get_object(self):
id_ = self.kwargs.get("id")
return get_object_or_404(LocationStock, id=id_)
这是FormView:
class OutsAdd(FormView):
form_class = OutsModelForm
success_url = reverse_lazy('base:dashboard')
def form_valid(self, form):
return super().form_valid(form)
这是url.py:
path('locations/<int:id>', LocationView.as_view(), name='location-detail'),
path('locations/outs', require_POST(OutsAdd.as_view()), name='outs-add'),
这是模板:
<form method="POST" action="{% url 'outs-add' %}" >
<div class="modal-content">
{% csrf_token %}
{% render_field form.quantity placeholder="Quantity"%}
{% render_field form.id_year placeholder="Year"%}
{% render_field form.id_location placeholder="ID Location"%}
</div>
<div class="modal-footer">
<input class="modal-close waves-effect waves-green btn-flat" type="submit" value="Save">
</div>
</form>
数据已在 /locations/outs 中发布,但未保存到实际 database.How 我可以保存吗?
Django 的 FormView
功能实际上只是为了在 GET 请求中显示表单,在 form_invalid
的情况下显示表单错误,并重定向到新的 URL如果表格有效。为了将数据持久保存到数据库中,您有两种选择。首先,您可以简单地在 FormView
:
form.save()
class OutsAdd(FormView):
form_class = OutsModelForm
success_url = reverse_lazy('base:dashboard')
def form_valid(self, form):
form.save()
return super().form_valid(form)
或者,您可以使用通用 CreateView
。 Django 的 CreateView
与 FormView
类似,只是它假设它使用 ModelForm
并在幕后为您调用 form.save()
。