在从 django-rest-framwork 0.3.2 转换到最新的 2.1.9 时解决了我的一些麻烦后,我看不到修复这个问题(我同意 Reinout 的博客...... ..)
我有这个代码:
class ApiSomeInputView(View):
form = ApiSomeForm
permissions = (IsAuthenticated, )
resource=SomeResource
def get(self, request):
"""
Handle GET requests.
"""
return "Error: No GET request Possible, use post"
def post(self, request, format=None):
some_thing = self.CONTENT['some_thing']
# check if something exist:
something = get_object_or_none(Something,some_field=int(some_thing))
if not something:
raise _404_SOMETHING_NOT_FOUND
#Note exludes are set in SomeResource
data = Serializer(depth=4).serialize(something)
return Response(status.HTTP_200_OK, data)
现在,我已经按照教程进行操作,并了解了如何做到这一点(甚至更漂亮)。通过在 url 中使用 slug。
但是......我想让客户端软件向后兼容......所以我想拥有这个而不将查询的值放在url中。客户端在帖子的标题中使用 json 数据和 ContentType json。
在 django rest 框架的第一个版本中,我什至得到了一个不错的可浏览表单,用于填写此查询的值
我的问题:如何在最新版本中完成这项工作?
我似乎无法在视图中获得表格......我可以在其中填写值并在过程中使用
也许很好地发布我到目前为止所尝试的内容......
首先,我在序列化器中更改了 ModelResource:
class SomethingSerializer(HyperlinkedModelSerializer):
class Meta:
model = Something
#exclude = ('id',)
depth = 4
然后视图更改为:
class ApiSomeInputView(APIView):
permissions = (IsAuthenticated, )
def post(self, request, format=None):
some_thing = request.DATA['some_thing']
# check if something exist: .... well actually this above already does not work
something = get_object_or_none(Something,some_field=int(some_thing))
if not something:
raise _404_SOMETHING_NOT_FOUND
serializer = SomethingSerializer(something)
return Response(status.HTTP_200_OK, serializer.data)
注意:基于接受的答案(汤姆克里斯蒂),我也提出了一个答案,我展示了我是如何工作的(更详细)。