所以,新手问题的时间非常重要,因为文档似乎错过了这个非常基本的例子。
我所要做的就是将模型中的值返回到Django中的视图。这是一些代码。
模型
class Page(models.Model):
def index(self):
ex = 'foo string'
return ex
视图
def index(request):
start = Page.objects.all().index
#start = Page.index
return render_to_response('index.html', {'page_content': start})
并且,没有任何东西被渲染。我使用< unbound方法Page.index>
得到此错误消息...
有趣的是,如果我跳过功能等等并创建像这样的模型
class Page(models.Model):
ex = 'goo string'
并用
调用它start = Page.ex
一切都很好。
非常感谢任何指针或工作示例! 感谢
答案 0 :(得分:1)
这种事情在Django教程中被遗漏了,因为它与Django无关。如果您不了解基本的Python,那么您需要学习Python教程。
你给出的代码的主要问题是你实际上没有调用索引方法,你刚刚提到它。在Python中,与许多其他语言一样,要调用方法,您需要使用method()
。所以你需要:
Page.objects.all()[0].index()
答案 1 :(得分:0)
Page.objects.all()
返回一组Page对象的查询,而不是单个Page对象。您可以拨打Page.objects.all()[0].index
。
为了正确渲染,我相信您应该将Page.objects.all()
传递给模板,然后在模板中迭代它,如下所示:
{% for page in page_content %}
{{ page.index }}
{% endfor %}
如果您定义这样的属性:
class Page:
ex = 'some char'
然后你创建了class属性,可以在类中和该类的每个实例中访问它(它由所有这些对象共享)。这不是实例属性。
答案 2 :(得分:0)
在Django中,您有两种类型的自定义数据库对象方法:基于行(或实例)的方法,基于表的方法。
基于行的方法:
您只需在模型类中定义一个方法:
class Page(models.Model):
def row_method(self):
return "Row method working on Page object with id " + str(self.id)
这个方法是从一个Page对象调用的!
所以你可以这样做:Page.objects.all()[0].row_method()
,但是你不能Pages.objects.all().row_method
因为Pages.objects.all()
返回一个没有定义row_method()
方法的Page对象数组。 / p>
这些方法是基于行的,因为它们在行级别(DB表中的单行,因此是相对模型类的单个实例)中起作用。
基于表格的方法:
您还可以使用Managers定义与特定模型类型相关的方法,而不是特定实例。您可以在此处找到有关管理器的文档:http://docs.djangoproject.com/en/1.2/topics/db/managers/
管理页面对象的集合时可以使用这些类型的方法,例如,您可以编写:
Page.objects.filter(title__startswith='The').calculate_total_title_length()
在这种情况下,该方法可以访问从查询返回的Page对象集合,在我的示例中,它计算查询找到的所有Page对象的所有标题长度的总和。