我正在尝试通过 Django REST 框架向我的 Django 模型公开 API。
我有一个对象观察
。一个观察可以包含多个已观察到的事物。所以我这样表示:
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 View :
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
我需要做什么才能发布检测到多个事件的观察结果?我想不明白。非常感谢。
最佳答案
(答案或多或少是从另一个similar but less clear question复制的)
要在单个 POST 中创建多个相关对象,需要可写的嵌套序列化程序,但目前尚不可用。
全力支持是work in progress ,但同时一个(hacky)解决方案是覆盖 create
每种情况下 View 中的方法:
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 or HyperlinkedRelatedField使协会进入决赛ObservedThing
邮政。
关于django - 发布一对多关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15202924/