为什么 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 的 CreateViewFormView 类似,只是它假设它使用 ModelForm 并在幕后为您调用 form.save()