Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Django
  • » Обратная выборка через related_name с фильтром [RSS Feed]

#1 Дек. 15, 2013 15:55:53

zillion
Зарегистрирован: 2012-08-24
Сообщения: 20
Репутация: +  0  -
Профиль   Отправить e-mail  

Обратная выборка через related_name с фильтром

Есть две модели:

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 для группы не представляю.

Заранее спасибо!

Отредактировано zillion (Дек. 15, 2013 16:04:40)

Офлайн

#2 Дек. 15, 2013 16:23:30

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Обратная выборка через related_name с фильтром

Но вот как приклеть фильтр
А что не приклеивается то?
group = Group.objects.get(id=group_id)
f = File.objects.filter(group = group)
Ну?



Офлайн

#3 Дек. 15, 2013 16:35:18

zillion
Зарегистрирован: 2012-08-24
Сообщения: 20
Репутация: +  0  -
Профиль   Отправить e-mail  

Обратная выборка через related_name с фильтром

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 что нужно учитывать ещё и группу

Офлайн

#4 Дек. 15, 2013 17:02:24

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Обратная выборка через related_name с фильтром

res = dict()
for f in File.objects.all():
   res.setdefault(f.group, []).append(f)



Офлайн

#5 Дек. 17, 2013 00:09:13

zillion
Зарегистрирован: 2012-08-24
Сообщения: 20
Репутация: +  0  -
Профиль   Отправить e-mail  

Обратная выборка через related_name с фильтром

Спасибо!

Офлайн

  • Начало
  • » Django
  • » Обратная выборка через related_name с фильтром[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version