모델에 대한 관리자 변경 목록을 볼 때 외래 키에 해당하는 열을 각각의 페이지에 연결할 수 있습니까? 간단한 예제는 Bar가 외래 키로 포함 된 Foo 객체입니다. Foo에 대한 관리자 변경 목록을보고 display_list 열에 Bar를 포함하도록 설정 한 경우 기본 열은 Foo 인스턴스의 편집 페이지에 연결되는 반면 Bar 열은 Boo 인스턴스의 편집 페이지에 연결됩니다. 사용 된 템플릿을 재정의 할 수 있음을 알고 있지만 필요하지 않은 솔루션이 있는지 궁금합니다.외부 키 변경 목록 링크 변경
15
A
답변
21
링크의 HTML을 리턴하는 변경 목록에 사용할 사용자 정의 메소드를 정의 할 수 있습니다. 푸 당신이 그 막대의 편집 페이지에 링크 할 수 있도록, 하나의 줄에 각 foo는 링크를 막대에 외래 키가있는 경우 - 명시된 바와 같이 귀하의 질문에
from django.core.urlresolvers import reverse
class MyFooAdmin(admin.ModelAdmin):
list_display = ('foo', 'bar_link')
def bar_link(self, obj):
url = reverse('admin:myapp_bar_change', args=(obj.pk,))
return '<a href="%s">Edit Bar</a>' % url
bar_link.allow_tags = True
하나의 문제. 그러나 각 막대는 여러 개의 foos에 연결되므로 'Foo 인스턴스의 편집 페이지'에 대한 링크를 요청하는 것은 의미가 없습니다. 설정 필터와 푸의 변경 목록 페이지로 링크 만이 줄에 링크 인스턴스 보여 당신이 할 수 있습니다 : 변경 목록 변종이 변경 사항을 멀리 웁니다 있지만
def foo_link(self, obj):
url = reverse('admin:myapp_foo_changelist')
return '<a href="%s?bar=%s">See Foos</a>' % (url, obj.pk)
foo_link.allow_tags = True
1
내가 발견하고 다니엘의 답변을 좋아, 당신 벌써 했어. 그래서 그 해결하는 방법입니다 :
이class CountryAdmin(ModelAdmin):
model = Country
list_display = ('pk', 'continent_changelist')
# ...
def queryset(self, request):
self._get_params = request.GET
return super(CountryAdmin, self).queryset(request)
def continent_changelist(self, obj):
url = reverse('admin:yourapp_country_changelist')
querystring = self._get_params.copy()
querystring['continent__id__exact'] = obj.continent.pk
return u'<a href="{0}?{1}">{2}</a>'.format(
url, querystring.urlencode(), obj.continent)
continent_changelist.allow_tags = True
당신에게 필터를 줄 것이다 :
먼저 당신이 요청에 대한 참조를 얻을 필요가, 당신은 내가 그랬던 것처럼 changelist_view
또는 queryset
포장으로 그렇게 할 수 있습니다 변경 목록 행 내부. 나는 다른 질문으로 이것을 대답했다. 그러나 이것이 내가 실제로 왔던 장소였다. 그래서 그것을 여기에 기록하고 싶었다. :-)
나는 그것을 시도 할 것이다. Foo 변경 페이지에 링크하여 의미 한 것은 Foo 변경 목록의 Foo 변경 페이지에 대한 기본 링크를 유지하기위한 것입니다 (필자는 그 내용이 명확하지 않음을 인정합니다). – Adam
1.4 또는 1.5의 모든 업데이트 (이 말은 장고 자체에 대한 훌륭한 추가 기능인 것 같아서 이미'contrib.admin'에 추가 된 것 같습니다)? –