Beispiel #1
0
 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]
Beispiel #2
0
 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]
Beispiel #3
0
 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]
Beispiel #4
0
 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]