2012-04-17 3 views
1

나는이 모델이 : 제품의 목록을 가지고 있으며, 각 제품이 어떤 범주에 속하는 U 각 회사를 볼 수있는, 내가 company pk을 사용하여 각 회사의 범주의 목록을 얻을거야데이터베이스보기가 필요한지 여부

class Company(models.Model): 
    name=models.CharField(max_length=100) 
    description=models.TextField() 
    #some more fields 

class Product(models.Model): 
    name=models.CharField(max_length=100) 
    company=models.ForeignKey(Company) 
    #some more fields 

class Category(models.Model): 
    parent=models.ForeignKey('self',null=True,blank=True) 
    name=models.CharField(max_length=100) 
    products=models.ManyToManyField(Product,null=True,blank=True) 
    #some more fields 

를, 무엇이다 가장 좋은 방법은 데이터베이스 뷰를 정의해야합니까? 어떻게해야합니까?

참고 : 나는 장고에서 데이터베이스보기를 사용하지 않았으며, 그것에 대해 검색했으며 쉽게 들리지 않습니다!

+0

질문은 무엇입니까.? 회사와 일치하는 카테고리를 얻는 방법? – agf

+0

네, 그렇게하는 것이 가장 좋습니다! –

답변

2

나는 항상 데이터베이스 뷰, 저장 프로 시저를 사용하지 않으며 유지 보수가 매우 어렵다는 간단한 이유 때문에 애플리케이션 코드 기반이 아닌 데이터베이스 자체에 '살아있다' 데이터베이스에 의존하지 않는 응용 프로그램에 작별 인사).

여기 내 충고는 django orm (많이 할 수 있음)을 고수하는 것입니다. 괜찮은 성능을 얻을 수 없거나 저장 프로 시저/뷰를 통해 사용할 수있는 고급 기능이 필요한 경우에만 해당 솔루션으로 이동하십시오.

django에서보기를 사용하는 것은 매우 쉽습니다.

쿼리 할 뷰가 1 개 있다고 가정하면 db에 뷰를 만들고 뷰의 열 (이름 및 유형)과 일치하는 필드가있는 모델을 작성합니다.

업데이트 : 그런 다음 메타 이름 정의에서보기 이름으로 테이블 이름을 설정해야합니다.

class ViewModel(models.Model): 
    ... view columns ... 

    class Meta(): 
     db_table = 'view_name' 
     managed = False 
+0

내가 이해하지 못하는 것은 뷰와 모델을 연결하는 방법입니까? –

+0

@Asma @Asma 죄송합니다. 죄송합니다. 지금은 대답을 볼 수 있습니다. :) –

+0

답변에 변경 사항이 표시되지 않습니다. D –

1

나는 아무 생각도 이유도 없어 : 당신이에 작성되지 않고 뷰 모델에 대한 테이블을 만들려고하지 장고 말할 필요가 그 후

는 다행히 그의 conf의이 db 뷰가 필요하다고 생각합니다. 일반적으로 Django에서는 ORM을 통해 파이썬에서 모든 로직을 수행하므로 사용하지 마십시오.

이 회사 카테고리의 목록을 얻으려면, 당신은 다만 할 수 있습니다

categories = Category.objects.filter(products__company=my_company) 

당신이 관심있는 회사 인스턴스 my_company을 어디

+0

사용에 대해서는 강조하지 않았습니다. 보기, 나는 많은 제품, tnx 많은 테마로 여러 회사가 있기 때문에 좋은 성능으로이 작업을 수행하려면 :) –

+0

이 방법은 성능에 문제가 있습니까? 그렇다면 U ORM을 사용합니다. –

+0

@Asma 시도해보고 성능 문제가 있는지 확인하십시오. 그렇지 않다면 그것은 좋은 성과입니다. – DrTyrsa

관련 문제