我想在同一页面上创建CreateView和UpdateView表单,但是仅当同时在同一页面上按下编辑按钮时才显示更新表单,但问题是当按下编辑按钮时将其重定向到更新视图(即同一页面)如果将updateView的URL链接到该按钮,并且如果我没有将updateView链接到该按钮,则该表单不会自动归档以进行更新。 它有什么解决方案?

class stock_add_view(CreateView):
    model = part_stock
    fields = ['part_id','entry_date','supplier','amount','remaining']
    success_url = reverse_lazy('parts:part_list')

class stock_update_view(UpdateView):
    model = part_stock
    fields = ['part_id','entry_date','supplier','amount','remaining']
    success_url = reverse_lazy('parts:part_list')
    template_name = 'part_detail.html'

网址格式

   url(r'^add_stock$',views.stock_add_view.as_view(),name='stock_add_view'),
url(r'^update_stock/(?P<pk>\d+)/$',views.stock_update_view.as_view(),name='stock_update_view'),

模板:part_detail.html

<script type="text/javascript">
$(function () {
    $('.edit_btn').on('click',pop_up);
    function pop_up() {
        alert("hi")
        $('#update_form').show();
    }
})
</script>
<div>//add form
<form method="post" action="{% url 'parts:stock_add_view'%}">
    {% csrf_token %}
    {{ form.as_p }}
    <input type="submit">
</form>
</div>
<div style="display: none;" id="update_form">//update form
<form method="post" action="{% url 'parts:stock_update_view' stock.id%}">
    {% csrf_token %}
    {{ form.as_p }}
    <input type="submit">
</form>
</div>
//edit button
<a href=""> <button type="button" class="edit_btn" data-id="{{ stock.id }}">Edit</button></a>

===============>>#1 票数:0 已采纳

由于两种表单都使用相同的字段,而不是两种基于类的视图,因此只使用扩展FormView的表单并使用update_or_create方法

class stock_add_view(FormView):
    model = part_stock
    template_name = 'part_detail.html'
    success_url = reverse_lazy('parts:part_list') 

    def form_valid(self, form):
        part_stock.objects.update_or_create(
            'part_id': form.cleaned_data["part_id"]
            defaults={
                'entry_date': form.cleaned_data["entry_date"],
                'supplier': form.cleaned_data["supplier"],
                'amount': form.cleaned_data['amount'],  
                'remaining':form.cleaned_data['remainig'],  
            }
        )
        return render(self.request, self.template_name, {'form': form})

这意味着django将查找id = part_id的对象(如果存在),将对其进行更新,否则将使用默认对象中的数据创建该对象。

  ask by Rajiv Shah translate from so

未解决问题?本站智能推荐: