如何将Django TextField
转换成包含该字段中所有单词的字典?
我尝试了以下操作,但似乎不起作用(没有错误,但是在模板或外壳中看不到任何东西):
def song_words():
result = Song.objects.filter(pk=request.pk).values_list('lyrics_ru',flat=True)
r_list =[]
for r in result:
r_list.append(r.split())
return r_list
我也尝试过:
def get_word(self):
dict_value = getattr(self, 'lyrics_ru_dict', None)
if not dict_value:
import json
dict_value = json.loads(self.lyrics_ru)
setattr(self, 'lyrics_ru_dict', dict_value)
return dict_value
def set_word(self, new_lyrics_ru):
import json
self.lyrics_ru = json.dumps(new_lyrics_ru).encode('utf8')
self.lyrics_ru_dict = dict(new_lyrics_ru)
word = property(get_word, set_word)
但是出现以下错误:json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
。我对json没有任何经验,也不知道这是否是正确的方法。
这是我的模特
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=1500)
lyrics_gb = models.TextField(max_length=1500)
def __str__(self):
return self.title
我的最终目标是,我想将lyrics_ru
中包含的单词与另一种模型中的单词(特别是target_word
)进行比较:
class Word(models.Model):
target_word = models.CharField(max_length=25)
source_word = models.CharField(max_length=25)
问题是我不知道自己是否走在正确的轨道上。因此,如果有人可以提供一些建议/链接,我将不胜感激!
答案 0 :(得分:0)
如果您希望歌词是不同单词的列表,那么您可以做的只是
words = text.split()
从描述的另一部分开始,您想将lyrics_ru
与target_word
的数据进行比较,并希望单词出现的次数(假设)。
所以你能做的就是
from collections import Counter
def matching_words():
match = []
result = Song.objects.values_list('lyrics_ru',flat=True).filter(pk=request.pk)
target_word = Word.objects.values_list('target_word')
for i in result:
if i in target_word:
match.append(i) # list of matching words
finaldict = Counter(match) # make dictonary of count