2010-06-08 4 views
0

에 따라이 같은 모델을 가지고 : 나는 관리자 인터페이스에있어 가능한 스위치에서 스위치를 선택하면미리 채울 드롭 박스 장고의 다른 드롭 박스의 선택에 관리자

class User(models.Model): 
    Switch = models.ForeignKey(Switch, related_name='SwitchUsers') 
    Port = models.ForeignKey(Port) 
class Switch(models.Model): 
    Name = models.CharField(max_length=50) 
class Port(models.Model): 
    PortNum = models.PositiveIntegerField() 
    Switch = models.ForeignKey(Switch, related_name = "Ports") 

, 나는 포트를 가지고 싶습니다 이에 따라 관련 스위치의 포트가 미리 채워집니다. 내가 이해하는 한, 미리 채우기 위해 일부 JS 스크립트를 만들어야합니다. 불행히도 나는이 경험이 없으며 가능한 한 간단하게 유지하고 모든 장고 관리 인터페이스를 다시 작성하지는 않습니다. 한 필드에이 기능을 추가하기 만하면됩니다.

내 문제를 해결해 주시겠습니까? 고맙습니다.

답변

1

작성하는 데는 js가 필요합니다. 장고 관리 인터페이스를 다시 작성할 필요가 없습니다. 사용자 정의 만하면됩니다. 이런 유형의 물건에는 몇 가지 것이 필요합니다. 여기

시작 : http://docs.djangoproject.com/en/1.2/ref/contrib/admin/#modeladmin-objects

자바 스크립트가 Media class를 사용하여 포함합니다.

django 양식은 모든 양식 입력에 일관된 ID를 부여하므로 쉽게 조작 할 수 있습니다. 그러나 고객과의 관계를 "전달"해야합니다. 내 말은, 고객이 어떤 과 함께 Ports이되는지 알아야합니다.

  • 인코딩 모델에 대한 customizing the admin template하여 태그에 JSON 출력을의 관계 : 당신이 얼마나 많은 데이터에 따라, 이에 대한 접근 방법의 몇 가지가 있습니다.

  • ajax를 사용하십시오. Switch을 사용하는 추가보기가 하나 이상 필요하며 Ports에 대한 json 목록 (또는 이와 비슷한 항목)을 반환해야합니다.

자바 스크립트 maniuplation은 정직해야한다 : 당신은 포트 드롭 박스의 관련 Ports하지만 모든 스트립 기능으로 보관의 onChange() 이벤트를 바인딩합니다.

jquery을 사용하여 DOM 조작을하는 것이 좋습니다.

0

위에서 제공 한 것보다 간단한 해결책으로 끝낼 수 있습니다. 템플릿을 사용자 정의하고 json을 태그에 넣는 대신이 json을 js 파일의 맨 앞에 넣고 $(). ready 호출을 두어 선택 상자 변경 이벤트에 리스너를 지정하고이 js 파일을 참조하십시오 ModelAdmin의 미디어에 넣습니다.

class MyAdmin(admin.ModelAdmin): 
    class Media: 
     js = ("my_code.js",) 

팁 : Firebug 또는 Chrome 검사기를 사용하여 양식의 HTML 입력란의 실제 이름을 조사하십시오.

+0

의견을 주셔서 감사합니다. 내가 필요한 것을 얻을 수있는 가장 쉬운 방법 인 것 같습니다. 장고 관리자의 JQuery에 대한 한 가지 질문입니다. 다음과 같이 시도했습니다. $ ("# id_Switch") (alert ("hello"); }); 하지만 작동하지 않습니다. FireBug는 $가 정의되지 않았 음을 알려줍니다.

작동한다 그러나 그렇지 않습니다. – onorua

+1

페이지에 jquery.js를 포함시켜야합니다 - 특정 관리 클래스의 경우 Media를 통해 또는 전체적으로 항목 편집 템플리트를 상속하고 extrahead (또는 이와 비슷한 형태) 블록을 오버라이드해야합니다. – Guard

0

이것이 바로 가기이며 최적이 아닌 것으로 알고 있지만 optgroups를 사용하여 두 개의 선택 위젯을 하나의 결합 위젯으로 간주 했습니까? 커스텀 자바 스크립트 작성을 줄여줍니다.

외부 키이므로 포트를 선택하면 스위치가 무엇인지 알 수 있습니다. 스위치에 optgroups가있을 수 있습니다 (값 ""). 스위치 만 선택하면 저장할 수 없습니다.볼 수있는 단계는 다음과 같습니다.

  1. switch을 생략하도록 양식 필드를 사용자 정의하십시오.
  2. port 양식 필드의 제목을 스위치/포트으로 변경하십시오.
  3. port 양식 필드의 choices을 스위치/포트에서 생성 된 튜플로 변경하십시오.
  4. 포트에서 스위치를 가져 오는 저장을위한 사용자 정의보기를 추가하고 사용자의 스위치를 포트에 설정합니다.

사용자/이해 관계자가이를 받아 들일 수 있다면 꽤 많은 장고 프로그래밍이 포함 된 JavaScript 프로그래밍을 해결할 수있는 방법입니다.

관련 문제