2012-02-11 10 views
0

他のモデルのモデルページ関連の入力に追加された管理パネルをカスタマイズする必要があります。しかし、私はそれらを保存する方法を把握することはできません。カードのモデルで変更した値を保存する方法Django Admin - カスタムフォームからデータを保存

admin.py

class OrderAdmin(admin.ModelAdmin): 
    change_form_template = 'admin/testapp/order/change_form.html' 

    def change_view(self, request, object_id, extra_context=None): 
     order = Order.objects.get(id=object_id) 
     card_list = Card.objects.all().filter(type=order.type) 
     result = super(OrderAdmin, self).change_view(request, object_id, extra_context={ 
     'card_list': card_list, 
     }) 
     return result 

change_form.html

{% for card in card_list %} 
    <input type="text" name="card-{{ card.id}}" value="{{ card.qty }}"></td> 
    {% endfor %} 

私はここで説明するように実行しようとしました: ​​

しかしself.cleaned_dataは、入力から私のデータが含まれていません。

ありがとうございました。

UPD:データをキャッチしましたが、かなり面倒です。 私は入力からIDをどのように計算するのか想像できません。

def save_model(self, request, obj, form, change): 
     request.POST['card-288'] 
+1

これはdjangoフォームを使用する理由です。 formsetを生成した場合は、formset(request.POST).save()を呼び出して終了することができます。 –

答えて

1

保存はsave_modelで行う必要があります。 card_listデータ でなければなりません。これは、djangoフォームを使用した場合は、formパラメータで利用可能でした。あなたが正しく指摘したように、それでもrequestからアクセスすることはできますが。

また、あなたは自動的にdjangoフォームが行うデータを自分自身でサニタイズする必要があります。

+0

同じ結果です。モデルデータのみを注文してください。 'def save_model(self、request、obj、form、change): 印刷フォーム' – vlad

0

あなたが生産したものを正確に得ています。

change_listに手動で追加するいくつかのフィールドが必要な場合は、(たとえば、hereを参照)を上書きする必要があります。

このようにすれば、IDを取得するのはあなた次第ですが、単純なsplit('-')[-1]が機能します。

これは、お客様の特定のニーズにお答えします。

一方、私はあなたが正しい方法で行っていないと思います。 djangoの管理者はForeignKeys ManyToManyを処理するのに十分なので、自分で処理する必要はありません。

上記のヒントを使って作業することができますが、最初のモデルを公開する新しいSOの質問と、達成しようとしていることを完全に開始することをお勧めします。

関連する問題