python - 根据视图中的计算字段对 django ListView 进行排序
问题描述
我想根据在我的视图中计算的(用户特定的)字段对我的模型中的列表进行排序。我知道如何使用 模型字段进行排序class Meta
,但如果我想在视图中使用计算字段,我不知道该怎么做。在寻找答案时,该extra()
方法已经出现,但 django 警告不要使用它,并且将来会弃用它。有没有其他方法可以实现这一目标?
我想要实现的目标:我有一个Song
带有title
,artist
和lyrics
字段的模型,在我的视图中,我计算用户对每首歌曲知道多少单词,这是我想要排序的字段。所以该字段是(提取):
for song in context['song_list']:
stat = ((len(user_word)+len(set(already_known)))/(len(set(lyrics_list_))))*100
Song
模型:
class Song(models.Model):
title = models.CharField(max_length=25)
artist = models.CharField(max_length=25)
url = models.URLField()
lyrics_ru = models.TextField(max_length=1800)
lyrics_gb = models.TextField(max_length=1800)
def __str__(self):
return self.title
def lyrics_as_list(self):
return self.lyrics_ru.split()
Flashcard
模型:
class Flashcard(models.Model):
owner = models.ForeignKey(User, on_delete=models.CASCADE)
deck = models.ForeignKey(Deck, on_delete=models.CASCADE)
question = models.TextField()
answer = models.TextField()
def __str__(self):
return self.question
KnownWord
模型(这是如果用户没有单词的抽认卡,但他/她已经知道该单词,因此也应将其视为已知单词):
class KnownWord(models.Model):
word_is_known = models.BooleanField(default=False)
word = models.CharField(max_length=25)
user = models.ForeignKey(User, related_name="known_words", on_delete=models.CASCADE)
song = models.ForeignKey(Song, on_delete=models.CASCADE)
def __str__(self):
return self.word
在视图中,我使用该lyrics_as_list
方法获取歌词列表。我还得到了用户的抽认卡列表。我做了一些其他的计算(例如获取单词的字典形式),然后我可以看到用户已经有多少单词,这是我想要排序的。
解决方案
推荐阅读
- c# - 有没有办法从 Razor VS 项目中删除 Account 文件夹?
- python - 在灰度图像的像素中查找“黑色级别”
- javascript - ReactJS:用于多个表单输入的单个 onChange 处理程序
- python - 熊猫:计算时间范围内的平均值
- python - 如何阻止python将int转换为float
- php - 我的 php PDO execute() 函数不起作用并在我的网络浏览器上显示空白页
- powershell - 为什么 2>$NULL 不会将错误重新路由到 NULL?
- wso2 - 通过 netty 设置接收缓冲区大小时函数参数无效
- java - TreeMap 的 Java Spring 比较器
- reactjs - 如何在本机反应中用svg绘制箭头线