我正在尝试通过 Django REST 框架向我的 Django 模型公开 API。
我有一个对象Observation
。一个观察可以包含多个已观察到的事物。所以我这样表示:
class Observation(models.Model):
photo_file = models.ImageField( upload_to=img_dir, blank=True, null=True )
titestamp = models.DateTimeField(blank=True, null=True)
latitude = models.FloatField()
longitude = models.FloatField()
class ObservedThing(models.Model):
thing = models.ForeignKey(Thing) # the thing being observed
observation = models.ForeignKey(Observation, related_name='observed_thing')
value = models.FloatField()
据我了解,这是一种一对多的关系。
我现在有一个 API 视图:
class ObsvList(generics.ListCreateAPIView):
"""
API endpoint that represents a list of observations.
"""
model = Observation
serializer_class = ObsvSerializer
以及相应的序列化器:
class ObsvSerializer(serializers.ModelSerializer):
observed_thing = serializers.PrimaryKeyRelatedField(many=True)
class Meta:
model = Observation
我需要做什么才能发布检测到多个事件的观察结果?我想不明白。非常感谢。
(答案或多或少是从另一个人复制的类似但不太清楚的问题 https://stackoverflow.com/questions/14978464/django-rest-nested-object-add-on-create-post-not-just-update-put)
要在单个 POST 中创建多个相关对象需要可写嵌套序列化器目前尚不可用。
全力支持是工作正在进行中 https://github.com/tomchristie/django-rest-framework/issues/395,但同时一个(hacky)解决方案是覆盖create
每种情况下视图中的方法:
class FooListCreateView(ListCreateAPIView):
model = Foo
serializer_class = FooSerializer
def create(self, request, *args, **kwargs):
data=request.DATA
f = Foo.objects.create()
# ... create nested objects from request data ...
# ...
return Response(serializer.data,
status=status.HTTP_201_CREATED,
headers=headers)
可能并不理想,但它对我有用,直到出现正确的方法。
另一种选择是创建相关的Observation
具有单独 POST 的单独对象,以及使用PrimaryKeyRelatedField 或 HyperlinkedRelatedField http://django-rest-framework.org/api-guide/relations.html在决赛中进行联想ObservedThing
POST.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)