2012-05-09 2 views
0

を通過した条件により、管理チェンジでaddlinkをカスタマイズします。 How Do I Show Django Admin Change List View of foreign key children?はで説明したように、私は管理者のビューを変更するクエリ文字列

私は顧客持っている - >プロジェクト - >アクション 私はこの方法でプロジェクトのすべてのアクションを取得します:

def related_actions(self, obj): 
    from django.core import urlresolvers 
    url = urlresolvers.reverse("admin:workflow_action_changelist") 
    lookup = u"project__exact" 
    text = obj.name 
    return u"<a href='%s?%s=%d'>%s</a>" % (url, lookup, obj.pk, text) 

ここで、私はchange_listのaddlinkをカスタマイズしたいと思います。 admin change_listは/workflow/templates/admin/workflow/action/change_list.htmlのテンプレートで上書きされます しかし、3つのモデルはすべて同じテンプレートを使用します。 ので、私は

<a href="add/{% if is_popup %}?_popup=1{% endif %}" class="addlink"> 

<a href="add/?actionstatus=5" class="addlink"> 

にactioncategoryが新しいアクションフォームで事前に選択された行を変更すると、テンプレート にharcodeのPARAMとしてよりよい解決策がなければならないと思います。しかし、どうすれば各モデルのaddlinkをオーバーライドできますか?

私はprojectsviewでのparamでactionstatusを取得する必要があります。

/workflow/action/?project__exact=5 

任意の提案を?

アクションモデルで使用するこの疑似コードはありますか?

def add(self) 
    get param projectid from url 
    return "<a href='/workflow/action/add/%s' target='_blank'>Add Action</a>" % (parent.project id) 

答えて

1

AFAIK、そのようなadd
あなたは拡張することで、change_list.html、特にそのオブジェクトリスト項目ブロックをカスタマイズすることができます:

ここ
{% block object-tools-items %} 
    <li> 
    <a href="{% url cl.opts|admin_urlname:'add' %}{% if is_popup %}?_popup=1{% else %}?{% endif %}{% if "project" in cl.params %}&amp;project={{ cl.params.project }}{% endif %}" class="addlink"> 
     {% blocktrans with cl.opts.verbose_name as name %}Add {{ name }}{% endblocktrans %} 
    </a> 
    </li> 
{% endblock %} 

を、clChangeListインスタンスです。 cl.paramsをフィルタリングする。request.GET。コードでは、クエリ文字列にprojectがあるかどうかをチェックし、その値を生成されたaddlinkに追加します。

チェンジリストページの読み込みが完了したら、リンクを追加するためのJSコードを書くこともできます。

(function($){ 
$(function(){ 
var m = window.location.search.match(/[?&]project=([^&]*)/); 
if (m){ 
    var link = $('a.addlink').attr('href'); 
    $('a.addlink').attr('href', link+(link.match(/\?_popup=1$/)?'&':'?')+'project='+m[1]); 
} 
}); 
})(django.jQuery); 

一般的なパラメータ操作については、thisを確認してください。

+0

ありがとう、これで私はすべてのモデルのGETパラメータを追加できます。それはうまく動作します。親ForeignKey(Selectbox)が事前選択されています。 ;-) – surfi

+0

アドバイスやリンクを更新するJSを教えてもらえますか?私は最初の解決法を好む。ちょうど興味のために。ありがとう。 – surfi

+0

@surfiはちょうど私の答えを更新しました。 – okm

関連する問題