djangoのモデルを特定の条件でソートする
9119 ワード
djangoのモデルを特定の条件でソートしたい
models.py
class Tag(models.Model):
# タグに振られるID
tag_id = models.AutoField(primary_key=True, verbose_name='タグID')
# タグの名前
tag_name = models.CharField(max_length=20, verbose_name='タグ名')
def __str__(self):
return str(self.tag_name)
class IdeaTagMap(models.Model):
ideatag_id = models.AutoField(primary_key=True, verbose_name='アイデアタグのID')
# 紐づけられる投稿
idea = models.ForeignKey(PostIdea, on_delete=models.CASCADE)
# 紐づけられるタグ
tag = models.ForeignKey(Tag, on_delete=models.CASCADE)
def __str__(self):
return str(self.idea) + '_' + str(self.tag)
models.py
class Tag(models.Model):
# タグに振られるID
tag_id = models.AutoField(primary_key=True, verbose_name='タグID')
# タグの名前
tag_name = models.CharField(max_length=20, verbose_name='タグ名')
def __str__(self):
return str(self.tag_name)
class IdeaTagMap(models.Model):
ideatag_id = models.AutoField(primary_key=True, verbose_name='アイデアタグのID')
# 紐づけられる投稿
idea = models.ForeignKey(PostIdea, on_delete=models.CASCADE)
# 紐づけられるタグ
tag = models.ForeignKey(Tag, on_delete=models.CASCADE)
def __str__(self):
return str(self.idea) + '_' + str(self.tag)
このようなモデルがあった時、Tagモデルは基本的に追加された順に表示されるが、その表示順をIdeaTagMapで参照された回数順に表示できるようにしたい。
方法としてはmodels.Managerを利用するのが一番早そう
models.py
# TagManagerとして追加
class TagManager(models.Manager):
# IdeaTagMapでそれぞれのタグが何回使われているかを表示し、多い順にソートする。
def get_queryset(self):
return super().get_queryset().annotate(
ideatagmap_count= models.Count('ideatagmap')
).order_by('-ideatagmap_count')
class Tag(models.Model):
tag_id = models.AutoField(primary_key=True, verbose_name='タグID')
tag_name = models.CharField(max_length=20, verbose_name='タグ名')
# 追加
objects = TagManager()
def __str__(self):
return str(self.tag_name) + '(' + str(self.ideatagmap_count) + ')'
class IdeaTagMap(models.Model):
ideatag_id = models.AutoField(primary_key=True, verbose_name='アイデアタグのID')
# 紐づけられる投稿
idea = models.ForeignKey(PostIdea, on_delete=models.CASCADE)
# 紐づけられるタグ
tag = models.ForeignKey(Tag, on_delete=models.CASCADE)
def __str__(self):
return str(self.idea) + '_' + str(self.tag)
このTagManagerを作成することで順番をソートすることができます。
考察、感想
トレンド機能などはこれらにさらに時間軸の設定も行っていると考えられるので、もっと勉強して実装できるようにしたい
Author And Source
この問題について(djangoのモデルを特定の条件でソートする), 我々は、より多くの情報をここで見つけました https://qiita.com/nao73/items/42c6666fd3926c8e04e0著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .