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

+0

@chromano - Я захватываю ссылки из подмножества списков. Я обновил код с помощью большего количества моделей. –

ответ

2

Вы можете получить кучу случайных связей, как это:

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

... Но это не фильтровать списки, которые вы хотите. Вы могли бы быть в состоянии сделать что-то вроде этого, чтобы получить, что: filter(list_set__id__in=...)

Смежные вопросы