django Rest Framework - 用于创建 m2m 关系的序列化器

2023-12-07

我在用django-restframework对于我的 API。我创建了一个序列化器,它应该列出我的对象并且应该能够创建它们。

我有一个Contact实体和Product。之间有一个标准的m2mlikes.

这是我的模型:

class Contact(models.Model):
    ...
    products_of_interest = models.ManyToManyField(Product, related_name="interested_contacts")

我的序列化器非常简单:

class ContactSerializer(serializers.ModelSerializer):

    class Meta:
        model = Contact

当我通过这个序列化器列出我的联系人时,我得到了所有带有产品 id 数组的联系人对象 - 太棒了:

"products_of_interest": [
        1,
        2
    ]

现在,当我想创建联系人并填充 m2m 时,我得到以下信息(通过 Chrome Postman 和表单数据):

  • 发送 products_of_interest = 1 --> 有效(!!!),但仅适用于一种产品!
  • 发送 products_of_interest = [1,2] --> 需要 pk 而不是 unicode
  • 发送 products_of_interest = 1;2 --> 需要 pk 而不是 unicode
  • 发送 products_of_interest[0] = 1, products_of_interest[1] = 2 --> 什么也不做

我对序列化器有一些经验,所以我想,也许我需要告诉序列化器,我想给他不止一种产品。所以我在我的序列化器中添加了这个:

products_of_interest = ProductSerializer(many=True, required=False, read_only=False)

现在我得到这个错误:

在使用此多对多关系之前,“”需要为字段“联系人”提供值。

我现在完全迷路了。我能做些什么?我不可能需要覆盖标准的射频功能来保存一个该死的简单的 m2m,可以吗?


您使用什么版本的 Django 和 drf?我无法使用 Django 1.7 和 drf 2.4.2 重现您的错误。这是我的代码:

模型.py

from django.db import models

class Product(models.Model):
    pass


class Contact(models.Model):
    products_of_interest = models.ManyToManyField(Product,
        related_name="interested_contacts")

序列化器.py

from .models import Contact
from rest_framework import serializers


class ContactSerializer(serializers.ModelSerializer):
    class Meta:
        model = Contact

views.py

from rest_framework import viewsets
from .models import Contact
from .serializers import ContactSerializer

class ContactViewSet(viewsets.ModelViewSet):
    queryset = Contact.objects.all()
    serializer_class = ContactSerializer

urls.py

from django.conf.urls import include, url

from rest_framework import routers
from . import views

router = routers.DefaultRouter()
router.register(r'contacts', views.ContactViewSet, 'contacts')
urlpatterns = router.urls

urlpatterns = [
    url(r'^', include(router.urls)),
    url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework'))
]

./manage.py shell
>>> from m2m_test.models import Product
>>> for i in range(3): Product.objects.create()
...
<Product: Product object>
<Product: Product object>
<Product: Product object>
>>>

然后在网络前端http://localhost:8000/contacts/:

使用原始数据形式发布: { “感兴趣的产品”:[1,2,3] }

-> 就可以了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

django Rest Framework - 用于创建 m2m 关系的序列化器 的相关文章

随机推荐

  • HTML 中的 PHP 无法使用 Flask 运行

    我最近刚刚开始使用 Flask 以前没有 html php 经验 所以如果这是天真的 请原谅我 我试图在 html 文件中使用一些 php 来改进我构建的 web 应用程序 但甚至无法让最简单的测试用例发挥作用 例如 取一个测试用例这个网站
  • 1980 年以来计算领域的重大新发明

    Locked 这个问题及其答案是locked因为这个问题是题外话 但却具有历史意义 目前不接受新的答案或互动 这个问题源于comments关于过去 50 年左右计算领域的不同进展 其他一些参与者要求我向整个论坛提出这个问题 这里的基本思想不
  • SQL 错误:将 varchar 数据类型转换为 datetime 数据类型导致值超出范围

    进入的数据
  • 使用 Qt 样式表更改状态更改时的图标

    我正在尝试支持我的应用程序的主题 但遇到了一个问题 我必须根据 QPushButton 的状态 默认 悬停 按下等 更改图标 这是我用来设置 QPushButton 图标的方法 QPushButton playButton qpropert
  • fread() 总是返回 1 的问题

    我看过类似的问题 但我的有点不同 我确保以二进制模式打开文件并检查读取时是否发生错误 文件内容 message1 message2 53467 读取简单文件的程序 int bytesRead FILE CSV CSV fopen Temp
  • 如何在java中对json对象数组进行排序

    我在 jsonarray 中有两个 json 对象 如下所示 errorCode 1 data messageId 590 message WvZiT3RPm7feC6Hxsa Ing messageType CHAT sentOn 01
  • 防止通过表单提交重定向文件上传(React、Express、Multer)

    我是第一次设置文件上传功能 我有一个反应前端和一个将存储文件的快速服务器 我已将其设置为用户可以提交文件 并按照我希望的方式保存在 Express 服务器上 但是 每当用户提交表单时 他们都会从反应前端 端口 3000 重定向到服务器上的
  • 用户输入

    在Python中获取用户输入是一个非常基本的疑问 Python是否将任何输入作为字符串并使用它进行计算 我们必须将其更改为整数还是什么 在下面的代码中 a raw input Enter the first no b raw input E
  • 禁用和启用 jQuery 上下文菜单

    I use test unbind click 删除 test 项目上的点击事件 如何使该项目再次可点击 其实我有一张桌子 单击事件时会出现上下文菜单 但如果没有条目 则必须禁用菜单 所以我使用上面的unbind 由于上下文菜单是由插件生成
  • 即使主安装程序没有管理员权限,也可以在 Inno Setup 中执行安装后程序(子安装程序)

    就像在这个问题 我正在尝试实现一个安装程序 该安装程序在安装结束时启动另一个第 3 方驱动程序安装程序 这是通过使用管理权限运行我的安装程序来实现的 如果未指定 则为默认权限 Setup PrivilegesRequired admin 然
  • MySQL 累积产品组

    我一直在使用 WRDS CRSP 数据集 由宾夕法尼亚大学维护的用于学术研究的股票价格数据库 我一直在用 Python 下载数据并将其插入到我本地的 MySQL 数据库中 数据如下所示 主键为 quote date security id
  • Intellij IDEA Maven 导入问题

    我想切换到 IntelliJ 进行 forge modding minecraft 当我按照他们在互联网上所说的去做时 我收到一个 Maven 错误 Unindexed remote maven repositories found Dis
  • 使用ajax获取变量中的另一个页面的内容

    有没有办法将 javascript 变量设置为另一个 HTML 页面的内容 I tried var X http www website com home html 但它没有返回任何东西 即使它解释了这个想法 所以 有人可以告诉我该怎么做吗
  • Apps 脚本 - Web 应用程序:可见源代码/库?

    如果我将一个项目发布为公共网络应用程序 仅接收和响应几个变量 那么完整的源代码以及可能使用的库对所有用户可见 不 发布应用程序和文件共享是两件不同的事情 您可以将 Apps 脚本应用程序发布为有权访问该 Web 应用程序的 任何人 甚至匿名
  • Selenium Web-Driver Firefox 配置文件 - 禁用弹出窗口和警报窗口

    我在访问某些网站时遇到问题 当我尝试切换到其他 URL 甚至关闭浏览器时 浏览器会提示警报 一些例子 http groovshark com http www dollardays com 为了使用 Selenium 解决该警报 我需要切换
  • 如何检查变量是否不为空?

    我知道下面是 JavaScript 中检查变量是否不存在的两种方法null 但我很困惑哪个是最佳实践 我应该这样做 if myVar or if myVar null 它们并不等同 第一个将执行下面的块if声明如果myVar is trut
  • 创建特定值连续运行的计数器

    我的数据中连续的零值被非零值的运行分隔开 我想为 SOG 列中的零运行创建一个计数器 对于 SOG 中的第一个 0 序列 将 Stops 列中的计数器设置为 1 对于第二个零序列 将 Stops 设置为 2 依此类推 SOG Stops 4
  • 仅允许特定字符集的正则表达式

    我需要一些帮助来创建一个正则表达式来解析文本框中的字符串 我目前有这两个 javascript 方法 function removeIllegalCharacters word return word replace a zA Z 0 9
  • 在linux中如何加入2个文件

    我有 2 个文件 file A 和 file B 文件 file A 包含文件名 然后是空格后的代码行 该代码行可以有随机类型的字符 例如空格 等 它看起来像这样 请注意 文件中的代码行没有被 包围 这仅用于说明目的 bash 猫文件 A
  • django Rest Framework - 用于创建 m2m 关系的序列化器

    我在用django restframework对于我的 API 我创建了一个序列化器 它应该列出我的对象并且应该能够创建它们 我有一个Contact实体和Product 之间有一个标准的m2mlikes 这是我的模型 class Conta