def get_tracks(self, query): search_fields = [ "mbid", "title__unaccent", "album__title__unaccent", "artist__name__unaccent", ] if settings.USE_FULL_TEXT_SEARCH: query_obj = utils.get_fts_query( query, fts_fields=["body_text", "album__body_text", "artist__body_text"], model=models.Track, ) else: query_obj = utils.get_query(query, search_fields) qs = ( models.Track.objects.all() .filter(query_obj) .prefetch_related( "artist", "attributed_to", Prefetch( "album", queryset=models.Album.objects.select_related( "artist", "attachment_cover", "attributed_to" ), ), ) ) return common_utils.order_for_search(qs, "title")[: self.max_results]
def get_albums(self, query): query_obj = utils.get_fts_query( query, fts_fields=["body_text", "artist__body_text"], model=models.Album) qs = (models.Album.objects.all().filter(query_obj).select_related( "artist", "attachment_cover", "attributed_to").prefetch_related("tracks__artist")) return common_utils.order_for_search(qs, "title")[:self.max_results]
def get_artists(self, query): search_fields = ["mbid", "name__unaccent"] if settings.USE_FULL_TEXT_SEARCH: query_obj = utils.get_fts_query(query, model=models.Artist) else: query_obj = utils.get_query(query, search_fields) qs = ( models.Artist.objects.all() .filter(query_obj) .with_albums() .prefetch_related("channel__actor") .select_related("attributed_to") ) return common_utils.order_for_search(qs, "name")[: self.max_results]
def get_artists(self, query): query_obj = utils.get_fts_query(query, model=models.Artist) qs = (models.Artist.objects.all().filter(query_obj).with_albums( ).prefetch_related("channel__actor").select_related("attributed_to")) return common_utils.order_for_search(qs, "name")[:self.max_results]