【发布时间】:2020-07-30 09:52:20
【问题描述】:
我的模型中有一个方法,我想在我的视图中调用它。但是,我收到 NameError 未定义此功能(我已在视图中导入所有模型并且所有迁移都是最新的)。它过去曾用于其他功能。
这是我的模型:
class Song(models.Model):
"""
fields
"""
def lyrics_as_list(self):
return self.lyrics_ru.split()
def sorted_strings(self, strings, locale=None):
if locale is None:
return sorted(strings)
collator = icu.Collator.createInstance(icu.Locale(locale))
return sorted(strings, key=collator.getSortKey)
在我看来,我想使用它的相关部分:
lyrics_list = models.Song.objects.get(pk=self.kwargs['pk']).lyrics_as_list() #this is also a method on my model, and it does work
lyrics_sorted = sorted_strings(set(lyrics_list, "ru_RU.UTF8")) #but this one gives me an error
错误:name 'sorted_strings' is not defined
当我将方法移动到我的视图时,它会起作用。但是我必须在几个视图中使用它,所以我试图遵循 DRY 原则,所以让它工作会很棒。
编辑 - sorted_strings 函数的用途:
我的Song 模型包含歌词。我在表格中显示歌词中的所有单词,但我想按字母顺序显示。为了能够对俄语单词进行排序,我需要添加这个功能。
【问题讨论】:
-
我看不出有充分的理由在
Song类中包含方法sorted_strings。不仅命名不好——方法更应该定义动作,名称中有动词,更好的名称是sort_strings——但它没有描述对象Song的任何行为。如果有参数将其保留在Song中,最好使用装饰器@staticmethod使其成为静态方法。 -
@cezar 谢谢,积分。如果不在我的
Song模型中,那我应该把它放在哪里? -
为了给你一个合适的答案,我需要更多地了解你的项目。请尝试反映如何更好地描述您尝试实现的功能。
sorted_strings这个名字很模糊。什么样的字符串? -
我已经编辑了我的问题来解释@cezar 的功能是什么
标签: python python-3.x django django-models django-views