#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))