사용자가 모델 인스턴스를 업데이트 할 수 있어야하며 첫 번째 인스턴스와 관련된 모델의 새 인스턴스를 업데이트하거나 만들 수 있어야합니다. 나는 formes를 사용하여이를 수행하고, 새로운 객체를 생성하는 데는 완벽하게 작동하지만, 이미 생성 된 객체를 표시하는 방법을 찾지는 못한다.db의 정보로 formset 채우기
class Order(Model):
...
class invoice(Model):
order = models.ForeignKey(Order)
...
그리고 내보기는 무언가이다 : 내 문제는 내가
그래서이 내 모델입니다 컨텍스트에 넣을 수 있도록 내가, 기존 데이터로 formsets을 채우는 방법을 모르겠입니다 이 같은 :
class OrderDetailView(UpdateView):
invoice_form_class = InvoiceForm
def get_context_data(self, **kwargs):
context = super(OrderDetailView, self).get_context_data(**kwargs)
if not 'invoice_formset' in context:
context['invoice_formset'] = formset_factory(self.invoice_form_class, extra=3, can_delete=True, formset=BaseFormSet)
return context
가이 작업을 수행하는 쉬운 방법은 아마,하지만 난 어디
편집을 찾는 아니에요 :을@mariodev 덕분에 inline_formsetfactory에 대해 배웠고 사용하고 있습니다. 이제 기존 데이터로 formsets을 채울 수 있으며 기존 데이터를 만들고 변경할 수 있지만 삭제하려고하면 아무 일도 일어나지 않습니다.
그래서 지금은이의 formset 정의하고 있습니다 :
InvoiceFormset = inlineformset_factory(Order, Invoice, fields=('code',), can_delete=True, extra=0)
을 내보기는 다음과 같습니다 있는지 확인하는)
class OrderDetailView(UpdateView):
invoice_form_class = InvoiceForm
def get_context_data(self, **kwargs):
context = super(OrderDetailView, self).get_context_data(**kwargs)
if not 'invoice_formset' in context:
context['invoice_formset'] = InvoiceFormset(instance=self.get_object())
return context
def post(self, *args, **kwargs):
data = self.request.POST
order = self.get_object()
form = self.form_class(data)
invoice_formset = InvoiceFormset(data, instance=order)
if form.is_valid() and invoice_formset.is_valid():
self.object = form.save(order)
for f in invoice_formset:
f.save(self.object)
return HttpResponseRedirect(reverse('order_detail', kwargs={'order_id': self.get_object().order_id}))
내가 포스트 (일부 여분의 라인을 추가 할 수 있습니다 내가 양식을 삭제해야하지만보기에 그것을 수행하는 것이 옳지 않은 것 같습니다. 내가 놓친 다른 것이 있습니까? 다시
편집 :
그래서 지금은 모두 좋은, 정확히 내가 가진 한이 마지막 문제를 해결이 link을 찾는까지 종료!
나는이 경우의 차이를 만들 것 FBV를 사용하여 표시되지 않습니다 , 내 문제는 기존 정보로 formsets을 채우는 방법에 관한 것이기 때문에. 그러나 다른 한편으로는, 당신의 링크가 나를 아주 많이 도왔고, 이제는 그것을하기 위해 inlineformset_factory를 사용하고 있습니다. 이제 formets을 채우고 새 인스턴스를 만들고 이미 존재하는 인스턴스를 편집 할 수 있지만 삭제하려고하면 아무 것도하지 않습니다. – Thiago