2009-12-17 5 views
0

서버 및 메모리 모듈 인벤토리를 유지해야합니다. & 드라이브. 나는 세 개의 테이블을 만들었습니다. 나는 메모리 및 드라이브 정보를 포함하여 서버에 관한 모든 정보를 검색하여 한 페이지에 표시 할 수 있기를 원합니다.복수 테이블 및 수정 된 쿼리 세트

class Server(models.Model): 
     Name = models.CharField(max_length=25) 
     ServiceTag = models.CharField(primary_key=True,max_length=12) #Uniquely identifies each server 

     def __unicode__(self): 
      return u'%s %s ' % (self.Name, self.ServiceTag) 

class MemoryModule(models.Model): 
     Manufacturer = models.CharField(max_length=15) 
     Size = models.CharField(max_length=15) 
     server = models.ForeignKey(Server, max_length=12) 
     mems = MemoryManager() 

     def __unicode__(self): 
       return u'%s %s' % (self.Manufacturer, self.Size) 

class Drive(models.Model): 
     Manufacturer = models.CharField(max_length=15) 
     Size = models.CharField(max_length=15) 
     server = models.ForeignKey(Server, max_length=12) 
     drvs = DriveManager() 

     def __unicode__(self): 
       return u'%s %s %s %s %s' % (self.Manufacturer, self.Size) 
나는 다음과 같은 "관리자"추가 고려하고

:

MemoryModule.mems.all() 
Drive.drvs.all() 

다음은 memorymodules에게 서비스 태그 값과 연관된 & 드라이브를 생성 할 수 있도록 ...

class MemoryManager(models.Manager): 
    def get_query_set(self): 
     return super(MemoryManager, self).get_query_set().filter(server='CC98361') 

class DriveManager(models.Manager): 
    def get_query_set(self): 
     return super(DriveManager, self).get_query_set().filter(server='CC98361') 

을 에이. 이것이 정확한 접근 방법입니까 b. 그렇다면 템플릿에 "MemoryModule.mems.all() 및 Drive.drvs.all()을 표시하는 방법은 무엇입니까?

답변

0

A. 정확 해 보이지만 테스트 해 보았습니까? 장고 모델을 사용하면 더 많은 오버 헤드가 있습니다. 코드를 파이썬 함께있을 것보다 실행 여부를 확인하려면 내가 명백한 오류를 볼 수 없다이 by-the-book 보이는

B를 나는 같은 것을 시도 할 것이다 :...!

<table> 
{% for mem in MemoryModule.mems.all %} 
    <tr> 
    <td>{{ mem.Manufacturer }}</td> 
    <td>{{ mem.Size }}</td> 
    <td>{{ mem.drvs }}</td> 
    </tr> 
{% endfor %} 
</table> 

편집

아차, 내 django 템플릿 엔진은 func와 비슷한 것을 원하지 않습니다. . 너무 개발자입니다. 최악의 경우 함수를 호출 할 수는 있지만 함수 호출처럼 보이지 않는 경우에만 인수를 사용하지 않습니다. 따라서 괄호는 없습니다. 즉, MemoryModule을 표시해야하며, 즉 {"MemoryModule": models.MemoryModule}을 사전에 전달해야합니다. 더 나은 것은 {"mems":models.MemoryModule.mems.all()}을 전달하고 템플릿에 {% for mem in mems %}으로 전화하면됩니다.

+0

답변에 표시된 템플릿에서 오류 메시지를 반환합니다. 나머지를 구문 분석 할 수 없습니다 : 'MemoryModule.mems.all()'의 '()' ... 내가 계속 해왔 던 문제입니다. : 하나의 템플릿에 데이터베이스의 두 개 이상의 다른 테이블에서 생성 된 데이터를 표시하는 방법. –

+0

저는 슈퍼 네이브입니다. "{"MemoryModule ": models.MemoryModule}"을 의미합니까? 어디로 갈 것입니까? 보기 또는 모델. –

+0

보기에서 사전을 템플릿에 전달합니다. 대부분의 뷰는 render_to_response 함수를 통해 수행됩니다. http://docs.djangoproject.com/en/dev/topics/http/shortcuts/#render-to-response. 보다 자세한 설명은 http://docs.djangoproject.com/en/dev/ref/templates/api/#compiling-a-string에서 찾을 수 있습니다. –