2012-04-30 2 views
2

이 특정 관리 페이지의 경우 '현재 값'(빨간색 원으로 표시된 부분)을이 특정 개체의 관리 페이지로 돌아가는 링크로 바꾸고 싶습니다.TabularInline에서 요소 표시 변경

하지만이 변경을 수행 할 위치를 찾을 수 없습니다. 어떻게 든이 이 표시되는 방법을 무시해야한다는 것을 알고 있지만 알아낼 수는 없습니다.

내가 원하는 것을 수행하려면 무엇을 재정의해야합니까?

current admin interface

관리 모델 정의 :

class FirmwareConfigElementsChoiceInline(admin.TabularInline): 
    model = FirmwareConfigElements 
    extra = 1 

class FirmwareConfigAdmin(admin.ModelAdmin): 
    save_as = True 
    list_display = ('name', 'description') 
    inlines = [FirmwareConfigElementsChoiceInline] 

필립의 큰 도움을 사용하여 나는이에받은했습니다

class FirmwareConfigElementsForm(forms.ModelForm): 
    def __init__(self, *args, **kwargs): 
     klass = FirmwareConfigElementsForm 
     super(klass, self).__init__(*args, **kwargs) 

     if self.instance.type == 'incfw': 
      value = self.instance.value 
      url = '#' # TODO: get the URL for the value 
      hyperlink = '<a href="%s">%s</a>' % (url, value) 
      label = self.fields['type'].label.replace(value, hyperlink) 
      self.fields['type'].label = label 

그러나 위의 코드에서

, self.fields['type'].label가있다 내용 Type 아니요내가 기대하고 있었던3210.

디버거에서 살펴 보았지만 변경하려는 특정 레이블로 이동하는 방법을 알아낼 수 없습니다.

답변

1

인라인 관리 모델에는 사용자 정의 템플릿을 제공하는 데 사용할 수있는 template property이 있습니다. 거기에서 URL을 추가하기 위해 코드를 수정해야합니다.

1

FirmwareConfigElements 모델의 경우 ModelForm을 맞춤 설정해야합니다. FirmwareConfigElementsChoiceInline.form 클래스 속성의 값으로 설정합니다. 여기

양식이 결합 된 경우 재정의 할 필드에 대한 새 레이블을 할당 할 ModelForm.__init__() 인스턴스 메소드를 오버라이드 (override) 할 수 있습니다 :

class FirmwareConfigElementsForm(models.ModelForm): 
    def __init__(self, *args, **kwargs): 
     klass = FirmwareConfigElementsForm 
     super(klass, self).__init__(*args, **kwargs) 

     if form.is_bound and 'value' in self.data: 
      value = self.data['value'] 
      url = '' # TODO: get the URL for the value 
      hyperlink = '<a href="%s">%s</a>' % (url, value) 
      label = self.fields['type'].label.replace(value, hyperlink) 
      self.fields['type'].label = label 


class FirmwareConfigElementsChoiceInline(admin.TabularInline): 
    model = FirmwareConfigElements 
    extra = 1 
    form = FirmwareConfigElementsForm 

이제 레이블이 동적으로 변경하려면, 사용자가 양식 데이터를 변경하면 훨씬 더 못 생기므로 referencing JavaScript media에 의지하여 위의 내용을 수행해야합니다.

+0

나는 내 질문을 업데이트했습니다. 당신의 대답은 올바른 방향 인 것처럼 보이지만 아직은 아닙니다. – MikeyB