Фильтрация с приортитетом одной категории над другой

Имеются 2 таблицы - Посты и Категории. Между ними отношение many to many. Необходимо получить 3 Поста, в фильтрации участвует 4 категории, но среди выборки из этих трех Постов как минимум один Пост должен соответствовать приоритетной категории. Т.е: В фильтрации участвуют - Категория-0(приоритетная), Категория-1, Категория-2, Категория-3 В результате необходимо получить как минимум 1 Пост имеющий связь с Категорией-0 и еще 2 случайных Поста подходящие под условия фильтрации. Как определить приоритет к необходимой мне категории?


Ответы (1 шт):

Автор решения: vadim vaduxa
import random

category = list(range(4, 8))
print('cats', category)

posts = [[random.randint(0, random.randint(0, 15)) for _ in range(3)] for _ in range(10)]
print('posts', posts)

def skey(ps, mx=len(category) + 1):
    lst = []
    for p in ps:
        try: x = category.index(p)
        except ValueError: x = mx
        else:
            if not x: return x,
        lst.append(x)
    return tuple(lst)

sort = sorted(posts, key=skey)
print('sorted', sort)

out:

cats [4, 5, 6, 7]
posts [[8, 1, 0], [12, 6, 2], [0, 12, 11], [0, 0, 2], [1, 5, 8], [9, 1, 3], [10, 5, 0], [7, 4, 3], [2, 8, 3], [4, 0, 5]]
sorted [[7, 4, 3], [4, 0, 5], [1, 5, 8], [10, 5, 0], [12, 6, 2], [8, 1, 0], [0, 12, 11], [0, 0, 2], [9, 1, 3], [2, 8, 3]]
→ Ссылка