Django-如何创建包含TextField每个单词的字典

时间:2020-06-24 09:34:42

标签: python django django-models django-views textfield

如何将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)

问题是我不知道自己是否走在正确的轨道上。因此,如果有人可以提供一些建议/链接,我将不胜感激!

1 个答案:

答案 0 :(得分:0)

如果您希望歌词是不同单词的列表,那么您可以做的只是

words = text.split() 

从描述的另一部分开始,您想将lyrics_rutarget_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