Множество полей через табличные данные list_diplay, повторяющее сгруппированные данные

#mysql #django #django-queryset #distinct-values

Вопрос:

экранные данные

У меня есть множество моделей Django через таблицу: bridge_qual_id , bridge_uoc_id , sequence_id

bridge_qual_id есть только одна запись, в которой единицы квалификации прикреплены с дополнительным полем для заказа на поставку.

Я хочу, чтобы квалификация отображалась только один раз и перечисляла все единицы для нее.

Я попробовал format_html_join метод класса моделей и вызов, list_display но, возможно, все правильно. На данный момент admin.ModelAdmin код просто перечисляет имена столбцов таблицы:

list_display = ['bridge_qual', 'bridge_uoc', 'uoc_sequence']

Я не могу сделать order_by на поле в MySQL в бэкэнде, поэтому попытался изменить набор запросов, но безрезультатно.

 @admin.register(tp_uoc_sequence, site=pg_site)
class tpuocAdmin(admin.ModelAdmin):
    def get_queryset(self, request):
        qs = super(tpuocAdmin, self).get_queryset(request)
        qs.extra(where= 
         ["""bridge_uoc_id IN (
             SELECT bridge_qual_id FROM tp_uoc_sequence 
             WHERE bridge_qual_id=1) as modified group by bridge_qual_id
             ORDER BY bridge_qual_id"""
             ])
        return qs

list_display = ['bridge_qual', 'bridge_uoc', 'uoc_sequence']
 

Комментарии:

1. tp_uoc_sequence-это имя таблицы.

2. Было бы идеально иметь дисплей, где Квалификация указана в качестве заголовка, а все единицы измерения перечислены в качестве подраздела ниже

3. Я нашел решение:

4. Я нашел решение: в моей квалификации модели я создал функцию, затем преобразовал кортеж моделей в список и использовал mark_safe для встраивания format_html_join. наконец, передал эту функцию в list_display. Я новичок и не знаю, как сейчас разместить изображение экрана. однако это <качество>: тогда каждая строка <качество><li>единиц<li></li>

5. def get_uocs_list(self): mylist = [] для u в self.uoc.all(): mylist.append(u.uoc_code) mystr = format_html_join(‘n’,'<ul><ul><li>{0}<li></li></li></ul></ul>’, ((i,) для i в mylist)) возвращает mark_safe (‘</ul><div>{0}{1}<div> < / div>’. формат(self.qual_code, mystr))