2016-10-07 2 views
1

에 따라 필터를 동적 인라인 형태의 내가 만든이 모델 :장고 : 사용자 선택

class Service(models.Model): 
    name = models.CharField(blank=False, max_length=200)code here 

class Monitor(models.Model): 
    name = models.CharField(blank=False, max_length=100) 
    services = models.ManyToManyField(Service, related_name='monitors') 

class Student(models.Model): 
    name = models.CharField(blank=False, max_length=100) 

class ServiceMonitors(models.Model): 
    student = models.ForeignKey(Student, on_delete=models.CASCADE) 
    service = models.ForeignKey(Service, on_delete=models.CASCADE) 
    monitors = models.ManyToManyField(Monitor) 

이 모델은 학생들에게 다양한 서비스를 제공하는 회사를 나타냅니다. 이 회사에서 근무하는 모니터는 그들이 제공하는 서비스가 필요한 학생에게 배정됩니다. 모니터는 많은 서비스를 제공 할 수 있으며 모든 서비스에 대해 많은 학생들을 보유 할 수 있습니다. 또한 학생들은 많은 서비스와 모니터를 가질 수 있습니다.

우리는 3 개의 서비스, s1, s2 및 s3을 가지고 있다고 가정 해 봅시다. 새 모니터를 만들 때 우리는이 서비스 중 일부를 할당합니다. s1과 s3을 가정 해 봅시다. 그런 다음 새로운 학생을 만들 때 학생이 갖게 될 서비스와 모니터를 선택할 수 있어야합니다. 드롭 다운 컨트롤 한 번

  • 에서 서비스를 선택

    1. : 여기

      내 문제는 내가 날 수있는 학생 (이름, 전화 등 ...)을 작성하는 양식을 필요로한다는 것입니다 서비스가 선택되면 양식에 해당 서비스를 제공하는 모니터가 표시되어야하므로 하나 이상의 확인란을 선택할 수 있습니다.

    2. + 버튼을 사용하여 프로세스를 반복 할 새 양식을 만들거나 표시하므로 은 새로운 서비스 및 관련 모니터를 선택할 수 있습니다.

    저는 장고를 매우 신 'm습니다. 사용자 생성 양식에 인라인 양식을 만들 수 있었지만 여기에 붙어 있습니다. 모든 모니터를 보여주는 CheckboxSelectMultiple 위젯으로 ModelMultipleChoiceField와 서비스를 선택할 수있는 드롭 다운 컨트롤이 있습니다. 여기에서 사용자가 서비스를 선택할 때 이러한 모니터를 필터링하는 방법과 새 서비스/모니터를 선택하기 위해 새 양식을 추가하는 방법을 알아야합니다.

  • 답변

    0

    이것은 기능상 매우 제한적인 Django 폼 프레임 워크 내에서 관리 될 수 없습니다. 그것은 당신이 ModelChoiceDropDown에있는 선택을 위해 필터링 된 쿼리 세트를 사용할 수있게 해준다. (나는 그것이 이름이라고 생각한다.) 그러나 선택 후 필터링은 이런 식으로 가능하지 않다. Django의 폼은 생성되어 HTML로 보내 지므로 많은 수정 작업없이 필터링 할 수 없습니다.

    당신이 할 수있는 방법은 REST 인터페이스 (Django Rest Framework 또는 Django-Tastypie 참조)를 설정하고 선택한 프론트 엔드 프레임 워크를 사용하여 드롭 다운을 연결하는 것입니다 (나는 Backbone.js를 선호하지만 많은 선택권이있다). 일단 서비스를 선택하면 후속 드롭 다운은 해당 서비스를 제공하는 모니터 만 표시하라는 요청에 필터를 추가합니다.

    장고 양식을 계속 사용하고 싶다면 기본 필드를 확장해야 이러한 기능을 사용할 수 있습니다.

    이것은 상당히 큰 토끼 구멍이며 나는 당신을 가리 키기 위해 팔목을 벗어나는 어떠한 자원도 가지고 있지 않습니다. 그러나 REST 인터페이스에 대한 정보는 좋은 시작이다.

    +0

    감사합니다. Don, 제 생각에는 사용자 지정 양식과 일부 JS를 사용해 보겠습니다. 사용자가 서비스를 선택하면 모든 서비스를 확인란으로 표시하고 관련 모니터를 표시합니다. 이렇게하면 모든 정보를 클라이언트 쪽에서 필터링 할 수 있습니다. – ESS