2012-02-11 68 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()並完成它。 – 2012-02-11 07:45:01

回答

1

保存應該在save_model完成。你card_list數據 也應該 會一直在form參數可用,如果你曾經使用Django表單。雖然您仍然可以通過request訪問它,正如您正確指出的那樣。

您也將有自己的消毒數據,即Django的形式的東西不爲你自動。

+0

結果相同。僅訂購模型數據。 'def save_model(self,request,obj,form,change): print form' – vlad 2012-02-11 06:50:42

0

你正在得到你所製作的:),沒有什麼意外的!

如果您希望某些您手動添加到change_list中的字段得到照顧,則必須覆蓋clean(例如,請看here)。

如果你走那條路,檢索ID是你的,但一個簡單的split('-')[-1]會工作。

這回答您的具體需求。

在另一邊,我想你是不會以正確的方式。 django管理員已經足夠處理ForeignKeys ManyToMany了,所以我認爲你不需要自己去做。

雖然你可以得到它與上面的提示工作,我建議你從頭再來 - 如果你想,一個新的問題,SO,你發佈的初始模型和究竟你要實現的目標。