Форум программистов, компьютерный форум, киберфорум
Python: Django
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 12.10.2020
Сообщений: 6

Повторяющиеся значения при фильтрации "многие ко многим" + "многие к одному"

12.04.2021, 18:13. Показов 1710. Ответов 0

Студворк — интернет-сервис помощи студентам
Доброго времени суток!

Есть модель:

Python
1
2
3
4
5
6
7
8
9
10
11
12
class Section(models.Model):
    title = models.CharField('Заголовок раздела', max_length=200)
    text = models.TextField('Текст раздела', default="Текст")
 
class Reference(models.Model):
    title = models.CharField('Материалы', max_length=200)
 
class Subsection(models.Model):
    section = models.ForeignKey(Section, on_delete=models.CASCADE)
    reference = models.ManyToManyField(Reference)
    title = models.CharField('Заголовок подраздела', max_length=200)
    text = models.TextField('Текст подраздела', default="Текст")
Хочу вывести все объекты Reference для заданного объекта Section
Пишу вид:

Python
1
2
3
4
5
6
7
8
9
10
def section_page(request, section_id):
    object_section = get_object_or_404(Section, id=section_id)
    references_list = Reference.objects.filter(subsection__section=object_section).order_by('title')
    
    context = {
        'object_section': object_section,
        'references_list': references_list,
    }
 
    return render(request, 'section_page.html', context)
На удивление, список reference собирается, но в нем имеются дубликаты (так как один объект Reference имеет отношение к нескольким объектам Subsection одного объекта Section.

Вопроса у меня два:
1) Почему это вообще работает (ведь у объекта Reference нет поля subsection)?
2) Как сделать правильно (без дубликатов и пр.)?

Добавлено через 2 часа 55 минут

В итоге, сделал так (не знаю, на сколько это хороший способ):
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
def section_page(request, section_id):
    object_section = get_object_or_404(Section, id=section_id)
    subsection_list = object_section.subsection_set.order_by('-date')
    references_list = []
 
    for s in subsection_list:
        references_list_i = s.references.all()
        
        if len(references_list_i) != 0:
            
            for n in references_list_i:
                
                if n not in references_list:
                    references_list.append(n)
        
    references_list.sort(key=lambda references: references.design)
    
    context = {
        'object_section': object_section,
        'references_list': references_list,
    }
 
    return render(request, 'section_page.html', context)
Добавлено через 15 минут
Может, задачу как-то можно решить с помощью "filter"?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
12.04.2021, 18:13
Ответы с готовыми решениями:

Модель. Отношение многие ко многим, и многие ко всем?
Добрый день, уважаемые форумчане! Имеется таблица модель: class Templates(models.Model): template = models.TextField() ...

Связь многие к одному/ один к многим
Вот не могу понять эти связи, как они действуют. Например у меня есть две таблицы: Автомобиль create table car( id int(2) NOT...

Как замаппить связь "многие к одному (многие к одному)"
Добрый день! Изучил простые примеры создания map классов для Fluent Hibernate. Не могу понять как правильно сделать в чуть более сложном...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.04.2021, 18:13
Помогаю со студенческими работами здесь

Не выбирается значения из связи многие ко многим
Здравствуйте. Создал базу с помощью Entity Framwork пл проекту Code First.Вот как выглядят два класса сущьностей: public class...

Обозначьте связи между таблицами БД и тип связи (один-ко-многим, один-к-одному, многие-ко-многим).
обозначьте связи между таблицами БД и тип связи (один-ко-многим, один-к-одному, многие-ко-многим). Обозначьте типы данных центральной...

Выбор при связи многие ко многим
у меня есть три таблицы, опишу их псевдо SQL кодом (если это так можно назвать), просто для общего понимания. Пользователь( name...

Не сохраняет данные при связи многие ко многим
Доброго времени суток уважаемые форумчане. Создаю БД code first с использование Entity Fraemwork. Имеются следующие модели: public...

Редактировать записи при связи многие-ко-многим
Добрый день. Очень нужна помощь. Есть три таблицы: Пациенты, Болезни и Заболеваемость (Код_пациента, Код_болезни). Последняя служит для...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru