我有一个Django rest框架API,它获取POST请求,并且在视图中有一个retrive方法
我希望当用户按下post按钮时,它将URL路由到视图类的retrieve方法中创建的呈现
代码:
#views.py
class LocationInfoViewSet(ModelViewSet):
# Order all objects by id, reversed.
queryset = LocationInfo.objects.all().order_by('-id')
serializer_class = LocationInfoSerializer
def retrieve(self, request, *args, **kwargs):
"""
This method is used to get the last object created by the user and render a map associated with the
mission's name.
"""
data = self.queryset[0]
serialized_data = LocationInfoSerializer(data, many=False)
points = list(serialized_data.data.values())
assign_gdt1 = GeoPoint(lat=points[2], long=points[3])
assign_gdt2 = GeoPoint(lat=points[4], long=points[5])
assign_uav = GeoPoint(lat=points[6], long=points[7], elevation=points[-3])
# Geo locations from the POST request.
gdt1 = [assign_gdt1.get_lat(), assign_gdt1.get_long()]
gdt2 = [assign_gdt2.get_lat(), assign_gdt2.get_long()]
uav = [assign_uav.get_lat(), assign_uav.get_long(), assign_uav.get_elevation()]
mission_name = points[1]
try:
# Check if a file already exists in the DB.
HTMLFileInteractionWithDB.table = THREE_POINTS_TRINAGULATION
openfile = HTMLFileInteractionWithDB.return_file_from_db(mission_name=mission_name)
return render(request, openfile)
except:
# Create a new file if one does not exists.
# The main function Creates an HTML File to be rendered.
return render(request, main(gdt1, gdt2, uav,
gdt1_elev=assign_gdt1.get_elevation(),
gdt2_elev=assign_gdt2.get_elevation(),
mission_name=mission_name
)
)
任务名称是一个主键,因此要访问检索方法,用户需要转到URL行并写入任务名称以使方法工作
那么,在我的项目(URL、视图…)中,我如何以及在何处创建此路由
例如:
我对这个观点的目的有点困惑
当
retrieve
方法使用pk从queryset列表中检索特定对象时,可以正确使用该方法。例如,您的一个LocationInfo对象。这总是一个get请求您的检索方法也缺少pk参数,该参数有时默认为None。
retrieve(self, request, pk=None)
如果我是你,我会为此创建一个完全独立的视图或视图集方法/操作
我们可以创建一个全新的方法,而不是为此使用
retrieve
:这将创建一个名为/{name}/last_object_by_user/的新端点,您可以向该端点发出post请求
你也会注意到我对你的查询集做了一些修改。您当前的查询集为我们提供由任何用户创建的最后一个LocationInfo。您是否在LocationInfo中创建了跟踪创建该LocationInfo的人的字段
以下是此文档:Marking extra actions for routing
注意:我没有测试这段代码,所以如果你复制粘贴这段代码,它可能不起作用,但这个想法很重要
相关问题 更多 >
编程相关推荐