2017-07-08 19 views
0

同じページにCreateViewとUpdateViewフォームを作成したいが、同じページにある編集ボタンが押されたときにのみ更新フォームが表示される。 updateViewのURLがボタンにリンクされている場合、updateビュー(つまり同じページ)にリダイレクトされ、updateViewをボタンにリンクしていない場合、フォームは自動更新されません。その解決策は何ですか?djangoで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パターン

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> 

答えて

0

あなたの代わりに、両方のフォームに同じフィールドを使用しているので、 2つのクラスベースのビュー、j UST使用FormViewコントロールを拡張1と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を持つオブジェクトを探します、内のデータと、それが作成されます。それ以外に更新されることを意味しますデフォルトのdict

関連する問題