1

私はこれを数時間突っ込んでいて、この問題に悩まされているように感じます。このビューは2つの操作を実行する必要があります。最初の作業操作は、送信されたフォームデータを使用してオブジェクトを作成することです。2番目の操作は、一意のフィールド「bar_code」に基づいて「status」フィールドを更新することです。最初に保存してから更新すると、「この%sを持つ%sはすでに存在します。」という一意の属性が原因で発生するエラーが発生します。これは予想どおりです。これらの両方の操作を実行するためのビューを維持したいと思います。

def check_in_part_two(request):
    errlst=[]
    c={}
    c.update(csrf(request))
    if request.method == 'POST':
        form = PartForm(request.POST)
        if form.is_valid():
            try:
                # Test if the part row exists based on bar_code
                instance = Part.objects.get(bar_code=request.POST['bar_code'])
            except Part.DoesNotExist:
                # Clean the sn and create new row
                form.cleaned_data['serial_number']
                form.save()
                return http.HttpResponseRedirect('/current_count/')
            else:
                edit = PartForm(request.POST, instance=instance, fields=['status'])
                if edit.is_valid():
                    edit.cleaned_data['bar_code']
                    edit.save()
                    return http.HttpResponseRedirect('/current_count/')

    else:
        form = PartForm(initial={'status':3L, 'serial_number':'placeholder'})
    return render(request,'add_part.html',{
                                           'title':'Add Item',
                                           'form': form,
                                           })
4

1 に答える 1

3

form.cleaned_data['serial_number']まず、行と行で何をしているのかわかりませんedit.cleaned_data['bar_code']。これらはメソッドではなく dict のキーであるため、行に単独で配置するだけでは何も起こりません。

第二に、これを複雑にしすぎています。次のコードは機能的に同等であり、おそらくより機能的です。

def check_in_part_two(request):
    if request.method == 'POST':
        try:
            part = Part.objects.get(bar_code=request.POST.get('bar_code'))
        except Part.DoesNotExist:
            form = PartForm(request.POST)
        else:
            form = PartForm(request.POST, instance=part)

        if form.is_valid():
            form.save()
            return http.HttpResponseRedirect('/current_count/')

    else:
        form = PartForm(initial={'status':3L, 'serial_number':'placeholder'})

    return render(request, 'add_part.html', {
        'title':'Add Item',
        'form': form,
    })
于 2012-08-13T19:58:24.367 に答える