django rest框架多个url参数

时间:2016-09-03 09:00:22

标签: python django django-rest-framework

在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())

2 个答案:

答案 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 }}

我希望它有所帮助,如果您提供有关“操作”所需对象信息的更多信息,可能会更加详细。