发布一对多关系

2023-12-19

我正在尝试通过 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(使用前将#替换为@)

发布一对多关系 的相关文章

随机推荐

  • gke-metrics-agent 与 prometheus 相关的多个错误

    我向 GKE 部署了一个新应用程序 我看到 GKE 仪表板的 gke metrics agent 上有数千个错误 它使用大量资源 I checked the logs and I saw all errors related to Prom
  • 是否可以重写控制台中的前一行?

    我正在尝试在我的控制台应用程序中创建过程动画 是否可以根据此需要重写以前的行 我知道关于 r但它仅适用于当前行 如果不可能的话 怎样才能实现动画效果呢 谢谢 我的控制台是标准 Ubuntu 12 04 终端模拟器 感谢 MrSmith42
  • 如何使用Python将BLOB插入Oracle?

    我正在尝试使用 cx Oracle 6 3 将大量 BLOB 每个 2 到 20 MB 插入到 Oracle 12 中 经过大量的谷歌搜索和实验 我得到了以下代码 我是 Python 新手 想知道 该方法有效吗 有更快的方法吗 usr lo
  • 使用 Get-Help cmdlet 以相同格式显示基于注释的帮助

    我尝试使用 Get Help cmdlet 以与显示从 XML 文件生成的 cmdlet 帮助主题相同的格式显示基于注释的帮助 执行此操作的能力记录在about Comment based Help http technet microso
  • Tridion GUI Extensions CommandSet 如何映射到 js 方法?

    Tridion GUI 扩展配置如何将名称映射到 JS 文件 例如 我正在使用 Jaime 的你好世界帖子 http jaimesantosalcon blogspot com 2011 02 sdl tridion 2011 ga gui
  • 如何在 C#/Win32 api 中找到 Windows 应用程序执行别名的目标?

    Microsoft Windows 终端 通过 Microsoft Store 安装 创建 0 字节wt exe文件是一个Windows 执行别名 https www tiraniddo dev 2019 09 overview of wi
  • 如何计算(数学)字符串表达式,vb.net

    我不确定我使用的术语是否正确 但我有一个字符串表达式 我希望计算它 这是一个例子 Dim S 4 4 dim result evaluate S some sort of treatment that return 8 我不确定这将如何运作
  • 与 MinGW-64 的静态链接

    我正在尝试使用 64 位 MinGWhttp sourceforge net projects mingw w64 files Toolchains 20targetting 20Win64 Automated 20Builds http
  • java.net.SocketException:连接由对等方重置:服务文件时套接字写入错误

    我正在尝试使用套接字实现 HTTP 服务器 如果客户端 例如浏览器 请求目录 服务器将显示可用文件的列表 当客户端请求文件时就会出现问题 我收到以下错误 java net SocketException Connection reset b
  • 如何在Angular 2中实现AOP

    我是 Angular 2 的新手 但我在 Angular 1 x 方面有很好的经验 我收到错误 找不到模块 aspect js dist lib aspect 下面是我的代码 日志记录 aspect ts import Injectable
  • Android OpenGL图像处理——不使用SurfaceView

    我想使用 OpenGL ES 2 和着色器进行一些背景图像处理 但不绘制到表面 即仅离屏渲染到帧缓冲区 虽然我已经在 iOS 上做到了这一点 但我在 Android 上却遇到了困难 我想我已经接近创建一个工作 OpenGL 上下文 但还没有
  • C++:生成函数调用树

    我想解析项目中当前的 C 文件并列出其中的所有方法 函数 然后生成函数调用和调用者树 F g 您可以参考 doxygen 如何生成调用树 我已经检查了 gccxml 但它没有列出从另一个函数调用的函数 请建议我一些我可以使用的轻量级工具 开
  • 检查数字的递归函数

    编写一个递归函数来检查数字中有多少位可以除以它们后面的数字 例子 84963应该返回 2 因为 8 可以除以 4 6 可以除以 3 我的函数似乎根本没有输出任何内容 include
  • 如何更改表列数据类型[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我有以下专
  • 如何建立/模拟持续的 TCP 连接?

    看起来 WCF TCP 连接不是持久的 第一次 ping 回复需要一段时间 但后续过程花费的时间更少 过了一会儿 又需要很长时间 再次重新连接 服务器 gt 在 net tcp 0 0 0 0 999 上启动 CLIENT gt Conne
  • CSS 只适用于 Safari?

    是否可以添加一个我只想在 Safari 中显示而不是在其他浏览器中显示的 css 块 下面是一个示例 如果您的浏览器是 Safari 或 Chrome 两者共享通用的 Webkit 渲染引擎 则将网站的字体颜色设置为绿色 media scr
  • 自动调整 WebView 大小以适应内容

    我正在开发一个 Xamarin Forms PCL 项目 该项目以 WebView 的形式显示帖子 因此我添加了可点击的内容 例如主题标签 我遇到的问题是 WebView 无法适应其内容的大小 WebView 不加载实际站点我使用以下方法将
  • APC 不记得 CLI 中的缓存

    我正在使用以下命令设置 APC 缓存数组 apc add ips ips 通过命令行 可以通过以下方式检索此缓存数组 apc fetch ips 在同一个脚本中 但是 无法从后续 CLI 脚本或通过 Apache 调用的 PHP 访问它 虽
  • 什么时候 `new Error()` 比 `Error()` 更好?

    ES5 语言规范明确指出 http www ecma international org ecma 262 5 1 sec 15 11 1 that Error foo 做同样的事情new Error foo 但我注意到在野外 时间越长ne
  • 发布一对多关系

    我正在尝试通过 Django REST 框架向我的 Django 模型公开 API 我有一个对象Observation 一个观察可以包含多个已观察到的事物 所以我这样表示 class Observation models Model pho