Django - Как установить упорядочивание по умолчанию для кверисета полей ManyToMany

У меня есть следующие модели:

class Hashtag(models.Model):
    ...
    created = models.DateTimeField(auto_now_add=True)
    ...

class Tweet(models.Model):
    ...
    hashtags = models.ManyToManyField(
        to='Hashtag',
        through='TweetHashtag',
        through_fields=('tweet', 'hashtag'),
    )
    ...


class TweetHashtag(models.Model):
    comment = models.ForeignKey(
        to='Tweet',
        on_delete=models.CASCADE,
    )
    hashtag = models.ForeignKey(
        to='Hashtag',
        on_delete=models.CASCADE,
        related_name="tweets"
    )
    created = models.DateTimeField(auto_now_add=True)

Моя проблема в том, что когда я получаю твит, я хочу получить хэштеги в порядке их создания.

tweet = Tweet.objects.get(id=1)
hashtags = list(tweet.hashtags.all())

Когда я проверяю hashtags, я вижу, что хэштеги расположены в неправильном порядке. Я хочу получить tweet.hashtags порядок по through_model.created (created из TweetHashtag модели.)

Есть ли какой-нибудь способ? У меня есть одна идея, но я не знаю, как это сделать. Идея заключается в том, чтобы переопределить менеджер отношений hashtags в модели Tweet.

Есть ли какой-нибудь способ?

Вы можете заказать HashTags с помощью .order_by(…) [Django-doc]:

tweet = Tweet.objects.get(id=1)
hashtags = list(tweet.hashtags.order_by('tweethashtag__created'))
Вернуться на верх