由于“无法获取 QuerySet 类的 repr”错误,嵌套序列化器上的非空约束失败

2024-04-13

尝试在我的 DRF 项目中使用基本的消息传递功能。我似乎对嵌套序列化器验证有问题。我是 DRF 的新手,已经阅读文档几天了,但我一定错过了一些东西。

错误发生在行内message = Message.objects.create(**validated_data)在我的序列化器中。请求返回一个Integrity error, NOT NULL constraint failed on accounts_message.sender_id,但是通过调试我发现这是由QuerySet方法中query.py中的错误引起的:self: unable to get repr for <class 'django.db.models.query.QuerySet'> model: <class 'accounts.models.Message'> query: none using: none

这似乎是导致我的问题的原因,因为序列化器生成的字典似乎包含请求中传递的所有数据,包括假定的空 sender_id。但是,我不确定如何解决这个问题。我需要覆盖 repr 吗?或查询集?这感觉就像我被困在一些相对简单的事情上。

序列化器.py

class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = ('id', 'name', 'email')
        extra_kwargs = {
            'id': {
                'validators': [UnicodeUsernameValidator()],
            }
        }

class MessageSerializer(serializers.ModelSerializer):
    sender = UserSerializer()
    recipients = UserSerializer(many=True)


    class Meta:
        model = Message
        fields = ('id', 'subject', 'body', 'read', 'sender', 'recipients')


    def create(self, validated_data):
        sender_data = validated_data.pop('sender')
        recipient_data = validated_data.pop('recipients')
        message = Message.objects.create(**validated_data)

        for user in recipient_data:
            user= User.message_recip.get_or_create(id=user['id'], name=user['name'])
            message.recipients.add(user)

        for user in sender_data:
            user= User.objects.get_or_create(id=user['id'], name=user['name'])
            message.sender.add(user)
        return message

模型.py

from django.db import models

class User(models.Model):
    id = models.IntegerField(primary_key=True)
    name = models.CharField(max_length=30)
    email = models.CharField(max_length=75)

    def __str__(self):
        return self.name

class Message(models.Model):
    id = models.IntegerField(primary_key=True)
    subject = models.CharField(max_length=250)
    body = models.CharField(max_length=5000)
    read = models.BooleanField(default=False)
    sender = models.ForeignKey(User, related_name='message_sender')

    recipients = models.ForeignKey(User, related_name='message_recip', default=1)

Views.py

class MessageList(APIView):

    def get(self, request):
        messages = Message.objects.all()
        serializer = MessageSerializer(messages, many=True)
        return Response(serializer.data)

    def post(self, request):
        serializer = MessageSerializer(data=request.data)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data, status=status.HTTP_201_CREATED)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)


class User(APIView):

    def get(self, request):
        user = User.objects.get(id)
        serializer = UserSerializer(user, many=False)
        return Response(serializer.data)

如果你给null=True and blank=True选项到你的外键,你将不会再得到 IntegrityError 了。由于您尚未添加 null 和空白选项,Django ORM 会在您的数据库中创建一个约束,并且不允许您向外键添加空值。Django 模型字段参考 https://docs.djangoproject.com/en/1.11/ref/models/fields/#arguments

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

由于“无法获取 QuerySet 类的 repr”错误,嵌套序列化器上的非空约束失败 的相关文章

  • 如何检查python xlrd库中的excel文件是否有效

    有什么办法与xlrd库来检查您使用的文件是否是有效的 Excel 文件 我知道还有其他库可以检查文件头 我可以使用文件扩展名检查 但为了多平台性我想知道是否有任何我可以使用的功能xlrd库本身在尝试打开文件时可能会返回类似 false 的内
  • Kivy - 有所有颜色名称的列表吗?

    在 Kivy 中 小部件 color属性允许输入其值作为字符串颜色名称 也 例如在 kv file Label color red 是否有所有可能的颜色名称的列表 就在这里 来自Kivy 的文档 https kivy org doc sta
  • Python - 来自 .进口

    我第一次尝试图书馆 我注意到解决图书馆内导入问题的最简单方法是使用如下结构 from import x from some module import y 我觉得这件事有些 糟糕 也许只是因为我不记得经常看到它 尽管公平地说我还没有深入研究
  • 删除 Django 1.7 中的应用程序(和关联的数据库表)

    是否可以使用 Django 1 7 迁移来完全删除 卸载应用程序及其所有跟踪 主要是其所有数据库表 如果没有 在 Django 1 7 中执行此操作的适当方法是什么 python manage py migrate
  • pyspark 数据框中的自定义排序

    是否有推荐的方法在 pyspark 中实现分类数据的自定义排序 我理想地寻找 pandas 分类数据类型提供的功能 因此 给定一个数据集Speed列 可能的选项是 Super Fast Fast Medium Slow 我想实现适合上下文的
  • Mac OS X 中文件系统的 Unicode 编码在 Python 中不正确?

    在 OS X 和 Python 中处理 Unicode 文件名有点困难 我试图在代码中稍后使用文件名作为正则表达式的输入 但文件名中使用的编码似乎与 sys getfilesystemencoding 告诉我的不同 采取以下代码 usr b
  • Python 中的流式传输管道

    我正在尝试使用 Python 将 vmstat 的输出转换为 CSV 文件 因此我使用类似的方法转换为 CSV 并将日期和时间添加为列 vmstat 5 python myscript py gt gt vmstat log 我遇到的问题是
  • 搜索多个字段

    我想我没有正确理解 django haystack 我有一个包含多个字段的数据模型 我希望搜索其中两个字段 class UserProfile models Model user models ForeignKey User unique
  • Python新式类和__subclasses__函数

    有人可以向我解释为什么这有效 在 Python 2 5 中 class Foo object pass class Bar Foo pass print Foo subclasses 但这不是 class Foo pass class Ba
  • 通过索引访问Python字典的元素

    考虑一个像这样的字典 mydict Apple American 16 Mexican 10 Chinese 5 Grapes Arabian 25 Indian 20 例如 我如何访问该字典的特定元素 例如 我想在对 Apple 的第一个
  • django 翻译:msgfmt:找不到命令

    我已经使用 wiki 脚本 webfaction 安装了 OSQA 现在我想编译一个消息文件 但出现以下错误 django msgfmt command not found 命令 输出 ls apache2 bin lib osqa osq
  • 将seaborn.palplot轴添加到现有图形中以可视化不同调色板

    将seaborn人物添加到子图中是usually https seaborn pydata org examples cubehelix palette html创建图形时通过传递 ax 来完成 例如 sns kdeplot x y cma
  • SocketIO + Flask 检测断开连接

    我在这里有一个不同的问题 但意识到它可以简化为 如何检测客户端何时从页面断开连接 关闭其页面或单击链接 换句话说 套接字连接关闭 我想制作一个带有更新用户列表的聊天应用程序 并且我在 Python 上使用 Flask 当用户连接时 浏览器发
  • 从 NumPy 数组到 Mat 的 C++ 转换 (OpenCV)

    我正在围绕 ArUco 增强现实库 基于 OpenCV 编写一个薄包装器 我试图构建的界面非常简单 Python 将图像传递给 C 代码 C 代码检测标记并将其位置和其他信息作为字典元组返回给 Python 但是 我不知道如何在 Pytho
  • Python SSL X509:KEY_VALUES_MISMATCH

    Python HTTPS server from http server import HTTPServer SimpleHTTPRequestHandler import ssl https stackoverflow com a 408
  • TKinter 中的禁用/启用按钮

    我正在尝试制作一个像开关一样的按钮 所以如果我单击禁用按钮 它将禁用 按钮 有效 如果我再次按下它 它将再次启用它 我尝试了 if else 之类的东西 但没有成功 这是一个例子 from tkinter import fenster Tk
  • 从 pandas DataFrame 中删除少于 K 个连续 NaN

    我正在处理时间序列数据 我在从数据帧列中删除小于或等于阈值的连续 NaN 时遇到问题 我尝试查看一些链接 例如 标识连续 NaN 出现的位置以及计数 Pandas NaN 孔的游程长度 https stackoverflow com que
  • 将上下文管理器的动态可迭代链接到单个 with 语句

    我有一堆想要链接的上下文管理器 第一眼看上去 contextlib nested看起来是一个合适的解决方案 但是 此方法在文档中被标记为已弃用 该文档还指出最新的with声明直接允许这样做 自 2 7 版起已弃用 with 语句现在支持此
  • 多个对象以某种方式相互干扰[原始版本]

    我有一个神经网络 NN 当应用于单个数据集时 它可以完美地工作 但是 如果我想在一组数据上运行神经网络 然后创建一个新的神经网络实例以在不同的数据集 甚至再次同一组数据 上运行 那么新实例将产生完全错误的预测 例如 对 XOR 模式进行训练
  • 查找总和为给定数字的值组合的函数

    这个帖子查找提供的 Sum 值的组合 https stackoverflow com a 20194023 1561176呈现函数subsets with sum 它在数组中查找总和等于给定值的值的组合 但由于这个帖子已经有6年多了 我发这

随机推荐

  • 更新 Chrome 后“违反 ReadyStateChange 处理程序花费了 760 毫秒”

    更新后谷歌浏览器 v57 0 2987 https en wikipedia org wiki Google Chrome version history 我们的网站在打开时出现错误彩色盒 https www jacklmoore com
  • 为什么使用 mov/cmp 而不是带有两个内存操作数的 cmp? [复制]

    这个问题在这里已经有答案了 我在执行二分搜索程序代码时发现了以下语句 l1 mov si low cmp si high 为什么我们需要将 low 存储在 si 中然后与 high 进行比较 不可以直接写cmp low high 你不能写c
  • 是否有统一的方法来计算 PerformanceCounter 任何类别内的任何计数器?

    我正在使用 C 的 PerformanceCounter 类来计算 内存 类别下的以下 2 个计数器 可用字节 和 使用中的提交字节百分比 PerformanceCounter pc new PerformanceCounter Memor
  • 将 RGB 数组转换为 Mat (OpenCv)

    我一直在尝试转换数组 R G B 在带有 opencv 的 Mat 对象中 但是返回的数据是错误的 有人知道为什么吗 double data 12 0 0 255 0 0 255 0 0 255 0 0 255 Mat src Mat 2
  • Python PasteScript 的粘贴创建的替代品?

    这好像是粘贴脚本 http pythonpaste org script s paster createfunction 是唯一广泛使用的用于在 python 中构建 生成项目框架的框架 我想知道人们在 python 世界中是否有其他选择
  • 计算所有 1 和 0 相等的二进制数

    我正在实现等边双分区算法的二进制表示 我想知道迭代具有相等 N 2 1 和 0 的 N 位的所有组合的最佳方法是什么 我试图找到最快的方法 而不是最简单的编码方法 谢谢 只是 N choose N 2 你要选择哪些位是 0 其余的是 1 如
  • 在法国 Windows Server 上使用 django 换行的问题

    Problem 当将通过 render to string 读入的字符串写入文件时 我的 Django 应用程序在每个 CRLF 之前引入一个 CR 在我的模板文件中 我使用了 CRLF Django 处理应用程序编写了一个文件 在每个 C
  • 自动加载和命名空间

    我使用 PHP 已经很长时间了 但现在开始尝试新的语言功能 例如命名空间 我有一个关于自动加载的问题 但在网络搜索中找不到足够的答案 假设我在不同的命名空间中有类 namespace foo bar baz class Quux names
  • 将java代码编译为exe(例如使用Launch4Java)是否确保代码无法被逆向工程?

    经过我自己的实验 我确信 Java 代码混淆在防止逆向代码工程方面并不安全 因此 我转而使用 Launch4J 将我的核心 jar 文件之一捆绑到单个 EXE 文件中 jar 文件还包含主要的入口方法 这会再次保护代码逆向工程吗 如果计算机
  • ASP/VBScript - Int() 与 CInt()

    ASP VBScript 之间有什么区别Int and CInt Int http www w3schools com Vbscript func int asp Int 函数返回指定数字的整数部分 CInt http www w3scho
  • 分组data.fame后的自定义函数

    给定以下数据框 d lt rep c a b each 5 l lt rep 1 5 2 v lt 1 10 df lt data frame d d l l v v v df d l v 1 a 1 1 2 a 2 4 3 a 3 9 4
  • 如何处理复杂的事情?

    您知道代码中对于项目至关重要但可能需要花费大量时间才能完成的特定部分吗 您是否有过这样的感觉 您宁愿做其他事情 可能不太重要 或者根本不写代码 而不是做那部分 你竭尽全力避免并使用你所知道的每一个懒惰技巧来推迟其不可避免的实施的那头野兽 现
  • 我可以对任意排列的浮点数向量进行确定性求和吗?

    假设我有一个 可能很大 由某些黑盒过程产生的浮点数向量 是否可以计算这些数字的按位可再现总和 如果黑盒过程总是以相同的顺序产生数字 那么按位可再现的求和很容易 只需从左到右对它们求和即可 但是 如果数字以随机顺序生成 也许是因为它们是从异步
  • 正则表达式匹配字符串之间的数字

    我需要从字符串 start 和 end 之间的以下文本中提取整数值 并且only之间 111222 garbage 999888 start 123456 end start 654321 end 想要的结果 123456 654321 这
  • 导致TTS初始化失败的原因有哪些?

    在以下场景中观察到 TTS 初始化错误 该错误过于随机 TTS 引擎已安装 语音集已存在 并且可以从辅助功能选项中播放示例 tts TTS 初始化在先前初始化和播放的同一设备上随机失败 在不同的设备 一加 华硕 三星 和各种 Android
  • UICollectionView - 滚动到下一页

    是否有机会使用 UICollectionView 滚动到所需的项目 scrollToItemAtIndexPath 并且不捕捉到项目本身 而是捕捉到项目所属的页面 我启用了分页功能 Cheers 你需要创建NSIndexPath而不是滚动到
  • 创建自定义 UTI 以与空投、iOS 一起使用

    我在 info plist 中使用此代码
  • 在 Bash 中动态构建命令管道

    我正在编写一个带有选项的 bash 程序 例如 my program l 3 a s l 3将输出限制为三行 a将选择我的所有文件 s将对输出进行排序 现在 我可以这样一次使用两个选项 if all 1 then if sort 1 the
  • 升级 ng-jhipster 库以兼容 Angular 16.2.0

    我正在开发一个依赖 ng jhipster 库的 Angular 应用程序 特别是版本 0 16 0 以下是 ng jhipster 的 package json 中的相关部分 name ng jhipster description A
  • 由于“无法获取 QuerySet 类的 repr”错误,嵌套序列化器上的非空约束失败

    尝试在我的 DRF 项目中使用基本的消息传递功能 我似乎对嵌套序列化器验证有问题 我是 DRF 的新手 已经阅读文档几天了 但我一定错过了一些东西 错误发生在行内message Message objects create validate