2017-08-03 13 views
0

でinlineformsetsを移入するためにどのように私は私のinlineformset生成inlineformset_factoryジャンゴ

CoinInfoFormSet = forms.inlineformset_factory(Portfolio,CoinInfo 
       ,form = CoinForm,can_delete=False,extra=1) 

を持っています。しかし、私のupdateviewでそれを設定しようとすると、データはアンバインドされ、エラーが生成されます。 "(隠しフィールドポートフォリオ)インラインの外部キーが親インスタンスの主キーと一致しませんでした。

class UpdatePortFolio(LoginRequiredMixin,UpdateView): 
    model = Portfolio 
    fields = ('title','is_public') 
    template_name = 'hello/edit_create_portfolio.html' 

    def post(self, request, *args, **kwargs): 
     portfolioForm = PortfolioForm(data=request.POST) 
     self.object = portfolioForm.save(commit=False) 
     data = self.get_context_data() 
     if 'add_coin' in request.POST: 
      cp = request.POST.copy() 
      cp['coininfo_set-TOTAL_FORMS'] = int(cp.get('coininfo_set-TOTAL_FORMS')) + 1 
      data['CoinInfoFormSet'] = CoinInfoFormSet(cp, prefix='coininfo_set') 
     for form in data['CoinInfoFormSet']: 
      print(form,'\n\n') 
     return render(request, 'hello/edit_create_portfolio.html', data) 


    def get_context_data(self, **kwargs): 
     data = super(UpdatePortFolio, self).get_context_data(**kwargs) 
     print(self.get_object()) 
     portfolio = self.get_object() 

     if self.request.POST: 
      data['CoinInfoFormSet'] = CoinInfoFormSet(instance=portfolio, prefix='coininfo_set') 
     else: 
      data['CoinInfoFormSet'] = CoinInfoFormSet(instance=portfolio, prefix='coininfo_set') 
     return data 

インラインフォームセットをどのように設定すればよいですか?

答えて

0

CoinInfoFormSet()のインスタンスを指定しないという問題があります。 CoinInfoFormSetオブジェクトをフォームにリンクする必要があります。私。アップデートしようとしているポートフォリオまたはコインのIDを取得し、それをCoinInfoFormSetのインスタンスとして割り当てます。

+0

self.get_object()がPortfolioのインスタンスであるため、このインスタンスは問題ではありません。また、私はインラインフォームをレンダリングするときに動作します。しかし、私はそれらが縛られていないので、投稿することはできません。 –