2016-10-21 5 views
1

이미지 및 위치와 연결할 수있는 태그가 있습니다.SQL 개수, 그룹 및 조인 쿼리에 해당하는 ORM을 사용하는 방법은 무엇입니까?

  • 태그는 고유합니다.
  • 이미지와 위치에 많은 태그가있을 수 있습니다.
  • Tag_Item 모델은 모든 것을 연결하는 데 사용됩니다.

다음은 모델입니다 :

LOCATIONS = (
    ('US', 'USA'), 
    ('UK', 'United Kingdom'), 
    ('FR', 'France'), 
) 

class Location(models.Model): 
    location = models.CharField(choices=LOCATIONS) 

class Image(models.Model): 
    image = models.ImageField(verbose_name='Image') 

class Tag(models.Model): 
    tag = models.CharField(max_length=150, unique=True) 

class Tag_Item(models.Model): 
    tag = models.ForeignKey(Tag, on_delete=models.CASCADE)  
    location = models.ForeignKey(Location, null=True, blank=True, default=None) 
    image = models.ForeignKey(Image, null=True, blank=True, default=None) 
    created_at = models.DateTimeField(auto_now_add=True) 

내가 미국을위한 다섯 개 가지 가장 흔한 태그를 선택 의미 쿼리를 작성하려고합니다.

내가 SQL에 다음과 같은 라인을 따라 뭔가를 생각하고 있었다 : 위치가 '미국'이다

  • 는 태그, Tag_Item, 및 위치에 가입하세요.
  • 태그별로 그룹화하십시오.
  • Tag_ID (또는 그 행에있는 값)의 수로 주문하십시오.

하지만 장고 ORM에서 어떻게 전송할 수 있는지 알 수 없습니다.

그런 종류의 복잡한 관계 쿼리를 작성하는 방법에 대해 도움을 주시겠습니까?

+2

주석 및 집계 살펴보기 https://docs.djangoproject.com/el/1.10/topics/db/aggregation/ – Johan

+0

안녕하세요, @TomBrock 궁금한 점은 제 대답이 도움이 되었습니까? –

답변

0

이 같은 쿼리를 시작하기 위해 몇 가지가 필요합니다


:

: 1 항목의 순서가 사전을 반환합니다

from django.db.models import Count 

usa_tags = Tag_Item.objects.filter(location__location='US') 
          .values('tag__tag__id') 
          .annotate(my_count=Count('tag__tag__id') 
          .order_by('my_count') 
상단 태그 2 항목입니다 사용 등의 두 번째 태그입니다
tag_id | my_count 
-------|--------- 
    5 | 101 
    1 | 53 
    ... | ... 

이제 해당 사전에서 5 개의 상단 태그를 검색 할 수 있습니다.