2011-07-17 4 views
11

私は、受信したアイテムの数量をユーザーが更新できるようにする在庫システムのページを構築しようとしています。フォームセットに最初のデータとしてQuerySetを渡そうとしています

すべての製品のテーブルを表示して、受け取った数量を入力させて、それを投稿して繰り返し、データベースを更新します。ここで

が私の見解です:

def new_shipment(request): 
    list_of_active_products = Product.objects.filter(status=1) 
    ShipmentFormSet = formset_factory(ShipmentForm, extra=0) 
    formset = ShipmentFormSet(initial=list_of_active_products) 
    return render_to_response('inventory/new_shipment.html', {'formset': formset}) 

はここにフォームのための私のモデルです:

class ShipmentForm(forms.Form): 
    sku = forms.IntegerField() 
    product_name = forms.CharField(max_length=100) 
    quantity = forms.IntegerField() 

そしてここでは、フォームテンプレートです:

<form method="post" action=""> 
    <table> 
     {% for form in formset %} 
    {{ form }} 
    {% endfor %} 
    </table>  
    <input type="submit" /> 
</form> 

そして、ここではエラーIです取得:

アトリビュートがレンダリング中にキャッチされました: 'Product'オブジェクトに 'get'属性がありません

誰もが私を助けることができますか?

あなたはむしろクエリセットよりも、初期データとして辞書のリストを渡すために持っているように見えるのドキュメントから

答えて

12

:あなたがあなたの最初のクエリを変更することがあり

Also note that we are passing in a list of dictionaries as the initial data.

list_of_active_products = Product.objects.filter(status=1).values() 

これは、モデルインスタンスオブジェクトではなく辞書のリストを返します。フォームセットに初期データを使用して

https://docs.djangoproject.com/en/dev/topics/forms/formsets/#using-initial-data-with-a-formset

ValuesQuerySet:また、クエリセットの引数を使用することができます https://docs.djangoproject.com/en/dev/ref/models/querysets/#django.db.models.query.QuerySet.values

+2

それをしました。私はvalues()関数を知らなかったので、頭がおかしくなってくれてありがとう。仕事に戻る... –

+0

クールで、うれしい働きがあります。 –

+1

ありがとう。あなたは例の機能のスペルを間違えました。 'list_of_active_products = Product.objects.filter(status = 1).values()' – DMunoz

関連する問題