2013-08-06 3 views
0

에서 나는 다음과 같은 모델을 가지고 :장고 ManyToMany은 관리자

class Device(models.Model): 
    device_name = models.CharField(max_length=50L, blank=True) 
    hostname = models.CharField(max_length=255L, blank=True) 
    ip = models.CharField(max_length=255L, blank=True) 
    vendor = models.CharField(max_length=255L, blank=True) 
    model = models.CharField(max_length=255L, blank=True) 
    town = models.CharField(max_length=255L, blank=True) 
    ... 
class Group(models.Model): 
    device = models.ManyToManyField(Device) 
    group_name = models.CharField(max_length=255L, blank=True, unique=True) 

장치 테이블 개 이상의 30,000 레코드를 포함하고, 그룹은 5000, 10000 및 더 많은 장치를 보유 할 수 있습니다.

내가 필요 :

  1. 그룹에 장치를 추가;
  2. 그룹의 내용보기;
  3. 전체 그룹 편집 (장치 제거).

표준 도구 (filter_horizontal, 인라인, raw_id_fields)는 적합하지 않습니다. 양식 편집 Group이 매우 느리게 작동하기 때문에 모든 장치 레코드를 검색합니다. 필요한 장치를 선택하려면 추가 정보 (모델, 제조업체, 위치 등)가 필요합니다. 그룹에서 필요한 장치를 제거하려면 30000 장치 목록을 스크롤하거나 그룹에서 7000 장치를 스크롤하고 CTRL 키를 사용하여 장치를 삭제해야합니다. 이 방법은 적용되지 않습니다. 내가 장치에 사용자 지정 작업을 추가하여 해결 그룹에 장치를 추가

문제

나머지 문제를 ((가) list_filtersearch_fields 내가 올바른 결과를 얻을 사용하여 다음 행동 "그룹에 추가") 나는 천국 찾지 못했습니다.

이 방법으로 문제를 해결하고 싶습니다. 사용자가 그룹을 입력하고 그룹 제목을 봅니다. 그가 그룹의 이름을 클릭하면 그룹에 속한 장치의 목록을 모든 장치 필드가있는 테이블로 얻습니다.

어떻게 달성 할 수 있습니까?

답변

1

짧은 대답 : 관리자 사이트를 사용하지 마십시오.

긴 답변 : 관리 사이트가 좋습니다. 몇 분 안에 강력하고 깔끔하고 쉽게 구성 할 수 있습니다. 그러나 그것은 그것에 관한 것입니다. 그리고 그것은 costumized 프로젝트에 사용될 의도가 없으므로 괜찮습니다. 예, admin 사이트가 기본값 대신 사용할 costum 양식을 작성하거나 다른 방식으로 표시하는 방법이 있습니다.하지만 여전히 유연하지는 않습니다.

두 가지 옵션이 있습니다. :

  1. 자신의 견해를 구축, 작동 방법 및 관리자 사이트를 사용하지 마십시오 필요

  2. 에 costumize, 프로젝트에 관리 사이트의 파일을 복사합니다.

이제 첫 번째 아이디어가 마음에 드는 것처럼 보일 수도 있지만 제 경험상 두 번째 아이디어는 항상 쉽습니다. 관리자 사이트를 사용하는 것처럼 유혹을 불러 일으킬 수도 있지만, 그렇게 복잡한 것을 만들지는 않습니다.

: 테이블에있는 장치의 목록과 정보를 표시 할 그런

url('^myadmin/$', 'myapp.views.main_admin'), 
url('^myadmin/(?P<group_pk>\d+)/$', 'myapp.views.admin_devices') 

당신이 'main_admin'표시 그룹의 목록, 그리고 'admin_devices'을 가지고 여기에 어떻게 보일지에 대한 일반적인 설명입니다 views.py의

def admin_devices(request, group_pk) 
    group = Group.objects.get(group_pk) 
    devices = group.device.all() 

    return render_to_response('devices.html', {'devices': devices}) 

그것은 t보다 훨씬 더 잘 보일 것

<table> 
<tr> 
    <th>device name</th> 
    <th>host name</th> 
    <th>ip</th> 
    ... and so on... 
<tr> 
{% for device in devices %} 
    <tr> 
     <td>{{ device.device_name }}</td> 
     <td>{{ device.host_name }}</td> 
     <td>{{ device.ip }}</td> 
        .... and so on... 
    </tr> 
{% endfor %} 
</table> 

템플릿 그는 각 사이트에 이미지를 제공하거나 그룹에 대한 모든 링크에 대해 멋진 UI를 제공 할 수 있기 때문에 사이트 기본보기를 관리 할 수 ​​있으며 장치를 볼 때 모든 30K 기기를로드하지 않고 페이지 매김과 일부 테마 추가를 피할 수 있습니다. 관리 사이트에서 허용하는 모든 것들을 쉽게 구현할 수있는 jQuery 패키지가 많이 있습니다 : 열 정렬 (Datatables) 또는 쉬운 날짜 추가 (jQuery UI) 및 내부 편집 (jEditable)을 사용하면 더 쉽게 사용할 수 있습니다. 귀하의 사용자

+0

나는이 응답을 두려워했습니다 : "관리 사이트를 사용하지 마십시오." 저는 웹 프로그래머가 아니며 CSS 및 Java 스크립팅에 깊이 관여 할 계획이 없습니다. 그러나 다른 방법이없는 것 같습니다. 답장을 보내 주셔서 대단히 감사합니다. – Pavel

+0

확실한 것. 웹 개발에 "뛰어들"싶지 않으면 django가 당신을위한 도구가 아닙니다. 당신이 필요로하는 이런 종류의 커스터마이징을 허용하는 것을 찾을 수 있을지는 모르겠지만 실제로는 CSM (콘텐츠 관리 시스템)이 아니란 것 같습니다. 직접 배우는 것보다 더 좋은 방법은 없습니다. (또한 자바 스크립트를 피하고 jQuery로 건너 뛰는 것이 좋습니다.) – yuvi

+0

흠, 어쩌면 관리자 사이트 사용을 포기하지 않아도됩니다. 그룹을 표시 할 URL을 덮어 쓸 수 있습니다. url (r '^ admin/mcs/group/\ d +', views.my_group) url (r '^ admin /', include (admin.site.urls)) 보기 및 양식 – Pavel