2011-04-20 2 views
0

내 모델 중 하나에 모든 링크를 가져 와서 임의의 샘플을 수행하는 메소드가 있습니다. Django 모델을 사용하여 임의의 선택과 결합 된 조인을 만들 수 있습니까? 현재의 방법은 데이터가 커지면 응용 프로그램을 중단시켜 낭비하는 좋은 방법 인 것 같습니다. :)Django 모델을 사용하여 조인을 사용하여 샘플링

class Link(models.Model): 
    link = models.URLField() 
    in_list = models.ForeignKey('linkrotator.LinkList', 
           related_name = 'links') 


class LinkList(models.Model): 
    in_list = models.ForeignKey('linkrotator.LinkListList', 
          blank = True, 
          null = True, 
          on_delete=models.SET_NULL, 
          related_name = 'lists') 

class LinkListList(models.Model): 
    number_of_links = models.IntegerField() 
    def get_links(self): 
     links = [] 
     for list in self.lists.all(): 
      links.extend(list.links.all()) 
     if len(links) <= self.number_of_links: 
      return links 
     return random.sample(links, self.number_of_links) 
+0

것이 유용 생각 : 당신은 그것을 얻기 위해 이런 일을 할 수 있는가? 목록이 연결된 모든 링크를 가져올 수 없습니까? '링크 = Link.objects.filter (list__isnull = False)'와 비슷한 것 @ – Carlos

+0

@chromano - 목록의 하위 집합에서 링크를 가져오고 있습니다. 더 많은 모델로 코드를 업데이트했습니다. –

답변

2

당신은 다음과 같이 임의 링크의 무리를 얻을 수 있습니다 :

links = self.lists.all().order_by('?')[self.number_of_links] 

을하지만 ... 그게 당신이 원하는 목록을 필터링하지 않습니다. 모든 목록을 반복해야하는 이유는 무엇 filter(list_set__id__in=...)

관련 문제