장고 모델을 특정 조건으로 정렬
8910 단어 django-rest-frameworkPython3장고
장고 모델을 특정 조건으로 정렬하고 싶습니다.
models.pyclass 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를 작성하여 순서를 정렬할 수 있습니다.
참고 이미지
고찰, 감상
트렌드 기능 등은 이들에 한층 더 시간축의 설정도 실시하고 있다고 생각되므로, 더 공부해 실장할 수 있도록(듯이) 하고 싶다
Reference
이 문제에 관하여(장고 모델을 특정 조건으로 정렬), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/nao73/items/42c6666fd3926c8e04e0
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
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)
# 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)
트렌드 기능 등은 이들에 한층 더 시간축의 설정도 실시하고 있다고 생각되므로, 더 공부해 실장할 수 있도록(듯이) 하고 싶다
Reference
이 문제에 관하여(장고 모델을 특정 조건으로 정렬), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/nao73/items/42c6666fd3926c8e04e0텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)