我使用Django 1.5和我試圖做這樣的事情的對象的列表:保存在Django
quotes = formset.save()
user = client_form.save()
for quote in quotes:
quote.client = user
quotes.save()
但名單沒有一個保存()方法,因此有一些內置的功能做相似的東西 ?
我發現SO Question about batch save objects in Django
這nswer這還算是真正的和Django 1.5? 有沒有辦法避免列表中的每個對象的save()調用?
這裏是我的實際視圖代碼:
def new_quote(request):
QuoteLineFormSet = modelformset_factory(QuoteLine, form=QuoteLineForm, extra=2)
if request.method == 'POST':
formset = QuoteLineFormSet(request.POST, request.FILES, queryset=QuoteLine.objects.none())
quote_form = QuoteForm(request.POST, request.FILES)
if formset.is_valid() and quote_form.is_valid():
quote_lines = formset.save(commit=False)
#quote_lines = formset.get_queryset()
quote = quote_form.save()
for quote_line in quote_lines:
quote_line.quote = quote
quote_line.save()
request.session['quote_id'] = quote.id
return HttpResponseRedirect(reverse('new_client'))
else:
formset = QuoteLineFormSet(queryset=QuoteLine.objects.none())
quote_form = QuoteForm()
return render(request, 'request_quote_form.html', {
'formset': formset,
'quote_form': quote_form,
})
我的解決方案,現在
quote_line_ids = [item.pk for item in formset.save()]
quote_lines_qs = QuoteLine.objects.filter(pk__in=quote_line_ids)
quote = quote_form.save()
quote_lines_qs.update(quote=quote)
真實https://github.com/django/django/blob/master/django/forms/models的.py – maazza