2011-04-20 39 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

爲什麼你需要遍歷所有列表?你不能只獲取所有有關聯的鏈接?就像'links = Link.objects.filter(list__isnull = False)' – Carlos 2011-04-21 00:07:03

+0

@chromano - 我從鏈表中獲取鏈接。我用更多的模型更新了代碼。 – 2011-04-21 00:28:36

回答

2

你可以得到一堆隨機鏈接是這樣的:

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

不過...。那不你想要的清單篩選。您也許能夠做這樣的事情來獲取:filter(list_set__id__in=...)