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'))