Django упорядочивание с отношениями "многие ко многим" в модели
Я использую Django-rest-framework modelviewset, у меня есть отношения "многие-ко-многим" с моими моделями ниже:
class Data(TimestampMixin):
user = models.ForeignKey(
"User",
null=True,
blank=True,
on_delete=models.SET_NULL,
related_name="files",
)
file = models.FileField(upload_to=user_directory_path, null=True, blank=True)
doc_id = models.TextField(null=True, blank=True)
url = models.CharField(max_length=255, null=True, blank=True)
deleted = models.BooleanField(default=False)
tags = models.ManyToManyField("Tag", blank=True, null=True)
class Tag(models.Model):
team = models.ForeignKey("Team", on_delete=models.CASCADE, blank=True, null=True)
name = models.TextField(max_length=255)
Теперь вот моя проблема, я хочу создать сортировку по имени тега, и вот что у меня есть в Model-view-set:
class UserDataViewSet(ModelViewSet):
queryset = Data.objects.all()
serializer_class = UserDataSerializer
ordering_fields = ["file"]
def get_queryset(self):
user = self.request.user
queryset = super().get_queryset()
owner_id = getattr(self.request.user.team, "owner_id", None)
if user is not None:
if owner_id is not None:
queryset = queryset.filter(user=owner_id, deleted=False)
else:
queryset = queryset.filter(user=user, deleted=False)
ordering = self.request.query_params.get("ordering", "")
if ordering == "tags":
pass
return queryset
Как вы можете видеть, у меня есть условие относительно ordering == tags
, я хочу выполнить сортировку внутри условия. Теперь я создал сырой запрос, который подходит для моих нужд, но я не знаю, как выполнить его на стороне drf
:
select
*
from
users_data ud
left join users_data_tags udt on
ud.id = udt.data_id
left join users_tag ut on
udt.tag_id = ut.id
where ud.user_id = 1
order by ut."name"