在rest api视图中我需要有2个对象。例如:
=Math.Truncate(1000*(AVG(Fields!Reading.Value, "CellReading_Reading")))/1000
获得它们的正确方法是什么?我的意思是我应该如何配置网址?我认为这不是一个很好的做法:class Foo(models.Model):
....
class Bar(models.Model):
....
或者:url(r'^foo/(?P<pk>\d+)/bar/(?P<pk>\d+)/$', FooBarView.as_view())
然后传递参数:url(r'^foobar/$', FooBarView.as_view())
。
答案 0 :(得分:1)
我认为这更像是一个设计问题。
哪一个更好?我会说这取决于模型foo和模型栏之间的关系。
如果您获得模型班级并且模型学生,并且您想获得学生信息并且基于哪个班级和相关student_number,就像每个班级都会有一个学生没有0.1。
你可以去:url(r'^class/(?P<class_pk>\d+)/student/(?P<student_pk>\d+)/$')
如果您想获取两个模型信息,但是您想将它们放入统计表中,
你可以去:url(r'^statistic/$')
然后传递如下参数:
?class=1&student=2
这些只是简单的示例,应该有其他情况,您应该使用其他方式来设计您的URL API。
答案 1 :(得分:0)
对于django&gt; = 1.5您可以将参数传递给类视图,并执行以下操作:
class Foo(TemplateView):
template_name = "yourtemplatesdir/template.html"
# Set any other attributes here
# dispatch is called when the class instance loads
def dispatch(self, request, *args, **kwargs):
self.id = kwargs.get('foo_id', "other_def_id")
self.barid = kwargs.get('bar_id', "other_def_id")
# depending on your definition, this class might be different
class Bar(TemplateView):
template_name = "yourtemplatesdir/template.html"
# Set any other attributes here
# this method might not be necessary
# dispatch is called when the class instance loads
def dispatch(self, request, *args, **kwargs):
self.id = kwargs.get('bar_id', "other_def_id")
在你的网址中有类似的内容:
from .views import FooBar
urlpatterns = patterns('',
url(
regex=r'^(?P<foo_id>\d+)/(?P<bar_id>\d+)/$'
view=FooBar.as_view(),
name='viewname'
),
)
然后,在FooBar的模板视图中,您可以执行以下操作:
{{ view.id }}
{{ view.barid }}
我希望它有所帮助,如果您提供有关“操作”所需对象信息的更多信息,可能会更加详细。