2014-01-22 44 views
3

在Django Admin中,當您修改對象屬性時,如果存在ForeignKey,則它將包含所有選項的下拉框,以及一個「+」按鈕來添加更多的選擇。當我點擊它時,我想預填一些數據。Djanjo管理員:單擊ForeignKey下拉列表中的添加另一個按鈕時預填數據

我發現我能做到這一點,如果我可以修改URL(例如:http://localhost:8000/admin/app/model/add/?field=value其中fieldvalue以編程方式修改)

我想我必須覆蓋與admin.ModelAdmin用途forms.ModelForm東西,但我不確定是什麼。

+0

你能發佈具有要預填領域模型的源代碼的example.DO呢? – arocks

回答

7

Django允許您替換請求的GET字典(它用於預填充管理表單)。

如果您在url中發送模型表單的字段值,那麼Django將自動從url獲取參數中獲取值。例如,考慮到 "http://myhost/admin/app/model/add/?name=testname",它將預先填寫管理員添加視圖模板中'表名'字段的值'testname'。

但是,如果您要在您的網址中發送任何ID,那麼您需要通過覆蓋add_view函數來修改get參數。

從計算器答案兩者

class ArticleAdmin(admin.ModelAdmin): 
    // ... 

    def add_view(self, request, form_url='', extra_context=None): 
     source_id = request.GET.get('source',None) 
     if source_id != None: 
      source = FeedPost.objects.get(id=source_id) 
      // any extra processing can go here... 
      g = request.GET.copy() 
      g.update({ 
       'title':source.title, 
       'contents':source.description + u"... \n\n[" + source.url + "]", 
      }) 

      request.GET = g 

     return super(ArticleAdmin, self).add_view(request, form_url, extra_context) 

它只是你的模型和領域:)

相關問題