0

我想知道在从数据库中的列中检索一大块数据后,是否有办法在 django 中返回子字符串。在这种情况下,我试图从“内容”列中检索数据以操作可用的文本并将其返回。

问题列表方法的检索

def prepare_questions(subject_id, scope, sort, topic, subtopic):
   question_list = Question.objects.filter(subject=subject_id)
return question_list

包含内容的模型

class Question(models.Model):
   subject = models.ForeignKey(Subject)
   content = models.TextField(verbose_name=_('Content'))

我希望做的是从'contents'中获取question_list的数据,通过python中的子字符串方法传递它。我不确定我应该从这里采取的步骤。此外,我希望方法结果作为 question_list 的一部分返回,并带有一个标记为方法返回值的新键,因为我不想覆盖检索到的原始“内容”值。

非常感谢任何指针或参考!谢谢!

4

2 回答 2

2

在模型上定义一个方法:

class MyModel(models.Model):
    ...
    def contents_substring(self):
        # do stuff
        return the_substring

然后,无论何时访问实例,无论是单独访问还是循环访问,您都可以执行以下操作:

instance.contents_substring()

或在模板中:

{{ instance.contents_substring }}
于 2012-07-31T18:14:59.290 回答
1

这是你想要的:

return [{'substring': substring_method(q.content), 'question': q} for q in question_list]

当然,您必须定义或替换substring_method为您想要的任何 Python 子字符串方法。

这一行所做的是使用 Python 的“列表理解”语法将每个Question对象映射question_list到一个包含两个项目的字典中,即substring(子字符串)和question(原始Question对象)。

以下是您可以如何使用新的prepare_questions

questions = prepare_questions( ... )  # whatever arguments
first_question = questions[0]  # let's assume there's at least 1
print first_question['substring']  # prints the substring of the first question's content
print first_question['question'].content  # prints the first question's full content

为了完整起见,这里有一个简单的示例“substring_method”:

def substring_method(s):
    return s[1:4]  # use Python slice syntax to return 2nd through 4th chars of string
于 2012-07-31T17:09:45.940 回答