4

私はdjango 1.5を使用していますが、次のようなことをしようとしています:

    quotes = formset.save()
    user = client_form.save()
    for quote in quotes:
        quote.client = user
    quotes.save()

しかし、リストには save() メソッドがないため、同様のことを行う機能が組み込まれていますか?

SO Question about batch save objects in Djangoでこの回答を見つけました

django 1.5 でもまだ True ですか? リストの各オブジェクトで 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)
4

3 に答える 3

0

このリンクも見てください。非常に簡単で使いやすいアプローチ。ブログから:

for x in seq:
   o = SomeObject()
   o.foo = x
   o.save()

になる

l = []
for x in seq:
    o = SomeObject()
    o.foo = x
    l.append(o)
insert_many(l)
于 2013-04-17T11:36:46.413 に答える