Я думаю, что в методе singer_filter
вы должны сделать что-то вроде:
def singer_filter(self, queryset, name, value):
return queryset.filter(song_id__singer_id__name_icontains=value)
Я не проверял это, но я думаю, что что-то подобное должно работать, если не разрешено третье отношение __
. Посмотрите здесь: https://django-filter.readthedocs.io/en/master/ref/filters.html?highlight=method
Я - большой поклонник JAXB для управления XML. В основном это предоставляет решение этой проблемы (я принимаю знакомство с XML, структурами данных Java и XML-схемами):
Работа с XML является трудной. Каждому нужен способ взять XML-файл - который является в основном текстовым файлом - и преобразуйте его в своего рода структуру данных, которой может тогда управлять Ваша программа.
JAXB возьмет XML-схему, что Вы пишете и создаете ряд классов, которые соответствуют той схеме. Утилиты JAXB создадут иерархию структур данных для управления этим XML.
JAXB может тогда использоваться, чтобы считать XML-файл и затем создать экземпляры сгенерированных классов - загруженный данными из Вашего XML. JAXB также делает реверс: посещает уроки Java и генерирует соответствующий XML.
мне нравится JAXB, потому что это просто в использовании, и идет с Java 1.6 (если Вы используете 1.5, можно загрузить JAXB .jars.) Способ, которым это создает иерархию классов, интуитивен, и по моему опыту, делает достойное задание, абстрагирующее далеко "XML" так, чтобы я мог сфокусироваться на "данных".
Так для ответа на вопрос: Я ожидал бы, что для небольших XML-файлов JAXB мог бы быть излишеством. Это требует, чтобы Вы создали и поддержали XML-схему и использовали "стандартные методы учебника" использования классов Java для структур данных. (Основные классы, маленькие внутренние классы для представления "узлов" и огромной иерархии их.) Так, JAXB является, вероятно, не настолько большим для простого линейного списка "предпочтений" приложения.
, Но если у Вас есть довольно сложная XML-схема и много данных, содержавших в нем, тогда JAXB является фантастическим. В моем проекте я преобразовывал большие объемы данных между двоичным файлом (который был использован программой C), и XML (так, чтобы люди могли использовать и изменить те данные). Получающаяся XML-схема была нетривиальна (много уровней иерархии, некоторые поля могли быть повторены, другие не могли), таким образом, JAXB был полезен в способности управлять этим.
Вот причина не использовать его: производительность страдает. Существует много издержек при маршалинге и немаршалинге. Вы могли бы также хотеть рассмотреть другой API для привязки объекта XML - такой как JiBX: http://jibx.sourceforge.net/
Это - "ORM для XML". Чаще всего используемый вместе с JAX-WS (и действительно реализации Sun разрабатываются вместе) для WS системы Звезды смерти.
С JAXB можно автоматически создать представления XML объектов (маршалинг) и объектные представления XML (немаршалинг).
Насколько XML-схема затронута, у Вас есть два варианта:
существуют также некоторые более простые библиотеки сериализации XML как XStream, Систематизатор или XMLBeans, который мог бы быть альтернативами.
JAXB является большим, если необходимо кодировать к некоторой внешней спецификации XML, определенной как XML-схема (xsd
).
, Например, у Вас есть торговое приложение, и необходимо сообщить об отраслях Uber Хромое Торговое Приложение для создания отчетов , и они дали Вам ultra.xsd
для продолжения. Используйте $JAVA_HOME/bin/xjc
компилятор для превращения XML в набор классов Java (например, UltraTrade
).
Тогда можно просто записать простое адаптер слой, чтобы преобразовать торговые объекты в UltraTrades
и использовать JAXB
для маршалинга данных через к Ультракорпорации Очень легче, чем бездельничание преобразованию отраслей в их формат XML.
то, Где все это ломается, - когда Ультракорпорация на самом деле не повиновалась их собственной спецификации и торговле price
, который они имеют вниз, поскольку xsd:float
должен на самом деле быть выражен как double
!
Я постоянно использую JAXB на работе, и мне это очень нравится. Он идеально подходит для сложных XML-схем, которые постоянно меняются, и особенно хорош для произвольного доступа к тегам в XML-файле.
Ненавижу сутенерство, но я только что завела блог, и это буквально первое, о чем я писал!
Посмотрите здесь:
http://arthur.gonigberg.com/2010/04/21/getting-started-with-jaxb/