IntegrityError:“user_id”列中的空值违反了非空约束(Django Rest Framework)

2024-02-18

我是 Django Rest Framework 的新手,我收到一个完整性错误,我正在尝试解决该错误

Intro:我有 2 个型号Patient and Embryo。 Patient 是 Django 默认用户的外键。只有 1 位用户是超级用户。所有患者都属于超级用户。每个患者可以有许多胚胎。我正在使用 Django Rest Framework 为两个模型创建视图ModelViewset

IntegrityError:列“user_id”中的空值违反了非空约束

下面是我收到的错误消息的屏幕截图

以下是我的模型

class Patient(models.Model):
    """Patients model which has all the patients information"""
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    first_name = models.CharField(max_length=25)
    last_name = models.CharField(max_length=35)
    phone = models.CharField(max_length=18)
    email = models.EmailField(unique=True)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    @property
    def full_name(self):
        return "%s %s" % (self.first_name, self.last_name)

    def __str__(self):
        return self.email


class Embryo(models.Model):
    """A ForeignKey model to the patient"""
    patient = models.ForeignKey(Patient, on_delete=models.CASCADE)
    code_name = models.CharField(max_length=100)
    karyotype = models.CharField(max_length=100)
    down_syndrome = models.BooleanField(default=False)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)
    GENDER_CHOICES = (
        ("M", "Male"),
        ("F", "Female"),

    )
    sex = models.CharField(max_length=1, choices=GENDER_CHOICES)

    def __str__(self):
        return self.code_name

我正在使用ModelViewSet为我的模型创建实例以下是我的看法。

 class PatientsApiView(viewsets.ModelViewSet):
    """Handles Creating, reading and updating Patients"""

    serializer_class = serializers.PatientsSerializer
    queryset = Patient.objects.all()
    authentication_classes = (TokenAuthentication,)
    filter_backends = (filters.SearchFilter,)
    permission_classes = (IsAuthenticated,)
    search_fields = ("first_name", "last_name", "phone", "email",)

    def perform_create(self, serializer):
        serializer.save(user=self.request.user)


class EmbroApiView(viewsets.ModelViewSet):
    """Handles Creating, reading and updating Patients"""

    serializer_class = serializers.EmbryoSerializer
    queryset = Embryo.objects.all()
    authentication_classes = (TokenAuthentication,)
    filter_backends = (filters.SearchFilter,)
    permission_classes = (IsAuthenticated,)
    search_fields = ("code_name", "karyotype", "sex", "down_syndrome",)

    def perform_create(self, serializer):
        serializer.save(patient__id=self.kwargs['pk'])

下面是我的serializers.py

class PatientsSerializer(serializers.ModelSerializer):
    """A serializer for the patients model."""

    class Meta:
        model = Patient
        fields = ("id", "first_name", "last_name", "phone", "email")

    def create(self, validated_data):
        """Create and return a new patient"""

        patient = Patient(
            first_name=validated_data["first_name"],
            last_name=validated_data["last_name"],
            phone=validated_data["phone"],
            email=validated_data["email"]
        )
        patient.save()
        return patient


class EmbryoSerializer(serializers.ModelSerializer):
    class Meta:
        model = Embryo
        fields = ("id", "patient", "code_name", "karyotype", "down_syndrome", "sex")

        def create(self, validated_data):
            """Create and return a new embryo"""

            embryo = Embryo(
                code_name=validated_data["code_name"],
                karyotype=validated_data["karyotype"],
                down_syndrome=validated_data["down_syndrome"],
                sex=validated_data["sex"]
            )
            embryo.save()
            return embryo

我究竟做错了什么?

以下是 @Håken Lid 要求的回溯

Environment:


Request Method: POST
Request URL: http://127.0.0.1:8000/patient/

Django Version: 2.1.2
Python Version: 3.6.6
Installed Applications:
['django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'rest_framework',
 'rest_framework.authtoken',
 'patients']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware']



Traceback:

File "/home/samir/PycharmProjects/GenomeVenv/lib/python3.6/site-packages/django/db/backends/utils.py" in _execute
  85.                 return self.cursor.execute(sql, params)

The above exception (null value in column "user_id" violates not-null constraint
DETAIL:  Failing row contains (4, Samir, Tendulkar, 2012795973, 2018-11-04 13:17:02.923723+00, 2018-11-04 13:17:02.923802+00, [email protected] /cdn-cgi/l/email-protection, null).
) was the direct cause of the following exception:

File "/home/samir/PycharmProjects/GenomeVenv/lib/python3.6/site-packages/django/core/handlers/exception.py" in inner
  34.             response = get_response(request)

File "/home/samir/PycharmProjects/GenomeVenv/lib/python3.6/site-packages/django/core/handlers/base.py" in _get_response
  126.                 response = self.process_exception_by_middleware(e, request)

File "/home/samir/PycharmProjects/GenomeVenv/lib/python3.6/site-packages/django/core/handlers/base.py" in _get_response
  124.                 response = wrapped_callback(request, *callback_args, **callback_kwargs)

File "/home/samir/PycharmProjects/GenomeVenv/lib/python3.6/site-packages/django/views/decorators/csrf.py" in wrapped_view
  54.         return view_func(*args, **kwargs)

File "/home/samir/PycharmProjects/GenomeVenv/lib/python3.6/site-packages/rest_framework/viewsets.py" in view
  116.             return self.dispatch(request, *args, **kwargs)

File "/home/samir/PycharmProjects/GenomeVenv/lib/python3.6/site-packages/rest_framework/views.py" in dispatch
  495.             response = self.handle_exception(exc)

File "/home/samir/PycharmProjects/GenomeVenv/lib/python3.6/site-packages/rest_framework/views.py" in handle_exception
  455.             self.raise_uncaught_exception(exc)

File "/home/samir/PycharmProjects/GenomeVenv/lib/python3.6/site-packages/rest_framework/views.py" in dispatch
  492.             response = handler(request, *args, **kwargs)

File "/home/samir/PycharmProjects/GenomeVenv/lib/python3.6/site-packages/rest_framework/mixins.py" in create
  21.         self.perform_create(serializer)

File "/home/samir/PycharmProjects/genomic_prediction/src/genomic_project/patients/views.py" in perform_create
  51.         serializer.save(user=self.request.user)

File "/home/samir/PycharmProjects/GenomeVenv/lib/python3.6/site-packages/rest_framework/serializers.py" in save
  214.             self.instance = self.create(validated_data)

File "/home/samir/PycharmProjects/genomic_prediction/src/genomic_project/patients/serializers.py" in create
  21.         patient.save()

File "/home/samir/PycharmProjects/GenomeVenv/lib/python3.6/site-packages/django/db/models/base.py" in save
  718.                        force_update=force_update, update_fields=update_fields)

File "/home/samir/PycharmProjects/GenomeVenv/lib/python3.6/site-packages/django/db/models/base.py" in save_base
  748.             updated = self._save_table(raw, cls, force_insert, force_update, using, update_fields)

File "/home/samir/PycharmProjects/GenomeVenv/lib/python3.6/site-packages/django/db/models/base.py" in _save_table
  831.             result = self._do_insert(cls._base_manager, using, fields, update_pk, raw)

File "/home/samir/PycharmProjects/GenomeVenv/lib/python3.6/site-packages/django/db/models/base.py" in _do_insert
  869.                                using=using, raw=raw)

File "/home/samir/PycharmProjects/GenomeVenv/lib/python3.6/site-packages/django/db/models/manager.py" in manager_method
  82.                 return getattr(self.get_queryset(), name)(*args, **kwargs)

File "/home/samir/PycharmProjects/GenomeVenv/lib/python3.6/site-packages/django/db/models/query.py" in _insert
  1136.         return query.get_compiler(using=using).execute_sql(return_id)

File "/home/samir/PycharmProjects/GenomeVenv/lib/python3.6/site-packages/django/db/models/sql/compiler.py" in execute_sql
  1289.                 cursor.execute(sql, params)

File "/home/samir/PycharmProjects/GenomeVenv/lib/python3.6/site-packages/django/db/backends/utils.py" in execute
  100.             return super().execute(sql, params)

File "/home/samir/PycharmProjects/GenomeVenv/lib/python3.6/site-packages/django/db/backends/utils.py" in execute
  68.         return self._execute_with_wrappers(sql, params, many=False, executor=self._execute)

File "/home/samir/PycharmProjects/GenomeVenv/lib/python3.6/site-packages/django/db/backends/utils.py" in _execute_with_wrappers
  77.         return executor(sql, params, many, context)

File "/home/samir/PycharmProjects/GenomeVenv/lib/python3.6/site-packages/django/db/backends/utils.py" in _execute
  85.                 return self.cursor.execute(sql, params)

File "/home/samir/PycharmProjects/GenomeVenv/lib/python3.6/site-packages/django/db/utils.py" in __exit__
  89.                 raise dj_exc_value.with_traceback(traceback) from exc_value

File "/home/samir/PycharmProjects/GenomeVenv/lib/python3.6/site-packages/django/db/backends/utils.py" in _execute
  85.                 return self.cursor.execute(sql, params)

Exception Type: IntegrityError at /patient/
Exception Value: null value in column "user_id" violates not-null constraint
DETAIL:  Failing row contains (4, Samir, Tendulkar, 2012795973, 2018-11-04 13:17:02.923723+00, 2018-11-04 13:17:02.923802+00, [email protected] /cdn-cgi/l/email-protection, null).

我将用户添加到序列化器中,请参见下图并删除了下面的代码,但错误仍然相同

def perform_create(self, serializer):
        serializer.save(user=self.request.user)
Views

Your PatientsSerializer.create方法扔掉user序列化器输入数据中的字段。

def create(self, validated_data):
    """Create and return a new patient"""

    patient = Patient(
        first_name=validated_data["first_name"],
        last_name=validated_data["last_name"],
        phone=validated_data["phone"],
        email=validated_data["email"]
        # you need a `user` as well.
    )
    patient.save()
    return patient

目前尚不清楚为什么您有一个自定义创建方法。您是否尝试过将其从序列化器中简单地删除?默认ModelSerializer.create方法使用整个validated_data字典。只需添加user to the PatientsSerializer.Meta.fields

class PatientsSerializer(serializers.ModelSerializer):
    """A serializer for the patients model."""

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

IntegrityError:“user_id”列中的空值违反了非空约束(Django Rest Framework) 的相关文章

随机推荐

  • 列表视图无限滚动

    我有一个使用自定义适配器的列表视图 现在我希望它显示前五个条目并在向下滚动时加载其他条目 最简单的方法是什么 如果我的列表代码是 public class Second extends Activity static final Strin
  • 查看 Visual Studio 中哪些方法/函数返回特定对象

    我正在 Visual Studio 中制作 C 应用程序 想知道是否有任何方法可以查看返回特定类型的每个方法 例如 我想知道哪些方法返回 AsymmetryAlgorithm 对象 Reflector http www red gate c
  • a[:] = b 和 a = b[:] 之间的区别? (Python)

    我被要求进行编码测试 但不知道答案 有人有主意吗 是切片运算符 当它位于左侧时 它会覆盖列表的内容而不创建新的引用 当它位于右侧时 它会创建具有相同内容的列表的副本
  • 如何使非英语网址在 next.js 中工作?

    如何使非英语 URL 与 next js ssr client 一起使用 欢迎任何想法 重写等 前段时间重写有助于解决这个问题 但在一些更新之后它停止工作 这是我的尝试fix this https github com zeit next
  • 从 listView 中删除标题

    我在尝试从文件中删除标头时遇到一些问题listView 起初我使用addHeaderView 添加它 但是当我更改为另一个布局时我希望它消失但是removeHeaderView 不起作用 我也尝试将可见性设置为 消失 但它并没有消失 我能做
  • RadioGroup 扩展relativelayout?

    我正在尝试为我的应用程序制作一个单选按钮网格 据我所知 使用常规方法这是不可能的RadioGroup因为它扩展了 LinearLayout 并且如果你尝试安排RadioButtons在里面使用RelativeLayoutRadioGroup
  • Prolog家族关系,意外失败

    谁能告诉我为什么我的姨妈关系不工作 每当我尝试调用它时它都会返回 false 我在下面写的叔叔关系似乎运作得很好 我不明白有什么区别 我也尝试过 not mother X Y 最后也但这并没有改变任何东西 FACTS parents dav
  • 使用泛型类型参数作为参数

    我正在尝试创建一个通用函数 它用一个函数调用另一个函数any类型参数 这是我尝试过的 static GetInstance
  • 为什么 CROSS APPLY *不*在此查询中出现无效列错误?

    我正在编写一些代码来查询一些DMV 某些列可能存在于 DMV 中 也可能不存在 具体取决于 SQL 版本 我在网上发现了一个有趣的建议 如何使用跳过特定检查CROSS APPLY 下面的查询是读取 DMV 中可能缺失的列的代码示例 该代码为
  • 在 JavaScript 中交换两个对象

    我有以下代码 MyObject prototype doIt function var a this obj1 var b this obj2 我怎样才能交换的值这个 obj1 and 这个 obj2所以obj1变成obj2 obj2变成o
  • 模板、函数指针和 C++0x

    我的个人实验之一是为了了解 C 0x 的一些功能 我试图将函数指针传递给要执行的模板函数 最终执行应该发生在不同的线程中 但对于所有不同类型的功能 我无法使模板正常工作 include
  • 类型错误:$scope.apply 不是函数

    我试图在检索联系人列表后呈现它rdflib js 它正在正确加载并将其保存在范围内的列表中 但我无法渲染 scope 不更新的正弦 看起来我正在调用 scope apply 在错误的地方 发生错误是因为我将其称为外部角度 但我故意在角度上下
  • 返回 pandas 数据帧的函数

    我不清楚我的问题 所以我正在审查这个问题 我有一个操作通用数据框的函数 它删除并重命名列和记录 def manipulate df df local df local rename columns A grouping column inp
  • 如何为复杂的数学方程创建 Java GUI 程序

    我正在学习 Java AWT 和 Swings 并了解如何创建基本的 GUI 元素 并且我能够使用它来编写一些程序 但是 当我试图了解如何为一些复杂的数学方程创建图表时 我无法找到一些文档或任何示例 例如 在这篇文章中 如何求解三角方程co
  • 获取我的主屏幕小部件的大小

    我只想知道我当前的小部件有多大 我发现了很多设置最小尺寸的问题 但我不想设置它 相反 我想显示适合小部件的信息 如果小部件太小 我需要隐藏一些东西 但我需要知道它的大小 我阅读了一些类的源代码 例如AppWidgetProvider 甚至文
  • Go SDK Apache Beam:单例侧输入 Singleton for int 定义不明确

    使用适用于 Apache Beam 的 Go SDK 我尝试使用侧面输入创建 PCollection 的视图 但我收到这个奇怪的错误 Failed to execute job on ctx making side input 0 sing
  • 查找两个顶点之间的所有最短路径

    给定一个有向图G V E 两个顶点s t和两个权重函数w1 w2 我需要找到最短路径s to t by w2在所有最短路径之间s to t by w1 首先 我怎样才能找到两个顶点之间的所有最短路径s and t Dijkstra 算法帮助
  • Webpack DefinePlugin 未设置/读取 node_env 变量

    我在通过 Webpack 的 DefinePlugin 将 node env var 注入到我的代码中时遇到了真正的问题 并且在阅读了大量帖子后似乎没有任何效果 我有一种感觉 我错过了什么 所以我的生产 webpack 配置是 Config
  • 在 r 和正则表达式中,如何检测排除某些混合条件的字符

    我试图检测字符串中的一些点 并将它们替换为单词旁边的相同点 例如 变为 AAA 但有一些条件我想避免替换 如果点之前有一个空格和一个字符 如果点位于两个连字符 之间 例如 如果输入是 string lt first second third
  • IntegrityError:“user_id”列中的空值违反了非空约束(Django Rest Framework)

    我是 Django Rest Framework 的新手 我收到一个完整性错误 我正在尝试解决该错误 Intro 我有 2 个型号Patient and Embryo Patient 是 Django 默认用户的外键 只有 1 位用户是超级