Найти - Пользователи
Полная версия: Обратная выборка через related_name с фильтром
Начало » Django » Обратная выборка через related_name с фильтром
1
zillion
Есть две модели:
class FilesCategory(models.Model):
    name = models.CharField(max_length=255)
class File(models.Model):
    name = models.CharField(max_length=255)
    file = models.FileField(upload_to=get_file_path)
    category = models.ForeignKey(FilesCategory, related_name='files')
    group = models.ForeignKey(Group)

По моделям думаю понятно, есть файлы и категории файлов, так же файл принадлежит определенной группе пользователей на сайте.

Задача состоит в отображении списка категорий и файлов под каждой категорией к которой они принадлежат.

Проблема возникает из-за фильтра по группе, если не учитывать её то можно просто достать список категорий и в шаблоне в цикле через related_name ‘files’ доставать список файлов текущей категории.

Но вот как приклеть фильтр через ORM для группы не представляю.

Заранее спасибо!
FishHook
Но вот как приклеть фильтр
А что не приклеивается то?
group = Group.objects.get(id=group_id)
f = File.objects.filter(group = group)
Ну?
zillion
FishHook
Сейчас так и реализовано (выводятся все файлы), но необходимо разбить по категориям.

В шаблоне сейчас так:
{% for c in categories %}
    <li>{{ c.name }}
        <ul style="margin-left: 20px;">
        {% for file in c.files.all %}
            <li>{{ file.name }}</li>
        {% endfor %}
        </ul>
    </li>
{% endfor %}
То есть нужно как-то сказать c.files.all что нужно учитывать ещё и группу
FishHook
res = dict()
for f in File.objects.all():
   res.setdefault(f.group, []).append(f)
zillion
Спасибо!
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB