python - 500错误: null value in column "timeline_id" violates not-null constraint

标签 python django reactjs django-rest-framework

我目前是一名学生,正在尝试使用 python/django 和 React 创建一个完整的堆栈 Web 应用程序。在构建后端时,我遇到了一个问题,即在发布包含关联的对象时,关联的 id 在响应负载和数据库之间丢失。我知道状态正在按其应有的方式更新,并且可以毫无问题地创建在后端不使用关联的其他对象。我认为我的错误一定是在我制作的模型或序列化器中的某个地方,但到目前为止我还没有找到它。

500 错误消息:

Integrity error at "api/v1/event"
null value in column "timeline_id" violates not-null constraint
DETAIL: failing row contains (index_id, junk_data, junk_data, 1, null)

我的模型:

from django.db import models

class Timeline(models.Model):
    name = models.CharField(max_length=50, default='n/a')

    def __str__(self):
        return self.name


class Event(models.Model):
    name = models.CharField(max_length=25, default='n/a')
    description = models.CharField(max_length=150, default='n/a')
    coordinate = models.IntegerField(default=0)
    timeline = models.ForeignKey(Timeline, on_delete=models.CASCADE, related_name="events")

    def __str__(self):
        return self.name


class Note(models.Model):
    article = models.TextField(default='n/a')
    event  = models.ForeignKey(Event, on_delete=models.CASCADE, related_name='notes')
    # event = models.ManyToManyField(Event)

    def __str__(self):
        return self.article

我的观点:

from rest_framework import viewsets

from .serializers import TimelineSerializer, EventSerializer, NoteSerializer
from .models import Timeline, Event, Note

class TimelineView(viewsets.ModelViewSet):
    queryset = Timeline.objects.all()
    serializer_class = TimelineSerializer

class EventView(viewsets.ModelViewSet):
    queryset = Event.objects.all()
    serializer_class = EventSerializer

class NoteView(viewsets.ModelViewSet):
    queryset = Note.objects.all()
    serializer_class = NoteSerializer

我的序列化器:

from rest_framework import serializers

from .models import Timeline, Note, Event

class NoteSerializer(serializers.ModelSerializer):

    class Meta:
        model = Note
        fields = ('id', 'title', 'article')


class EventSerializer(serializers.ModelSerializer):
    notes = NoteSerializer(many=True, read_only=True)

    class Meta:
        model = Event
        fields = ('id', 'name', 'description', 'coordinate', 'notes')


class TimelineSerializer(serializers.ModelSerializer):
    events = EventSerializer(many=True, read_only=True)

    class Meta:
        model = Timeline
        fields = ('id', 'name', 'events')

链接到 github 存储库: https://github.com/dantehollo/world_builder_site

我在 Linux (ubuntu 18.04.3) 上使用 python 3.6.8

我尝试尽可能具体和简短。如果缺少什么,请告诉我,我会在看到请求后立即发布。非常感谢任何关于这是什么、为什么会发生以及如何避免再次发生这种情况的帮助,谢谢。

最佳答案

根据您的 Event 模型,timeline 属性(也是外键)是必需的,并且不能为空。并且您忘记将此时间线添加到EventSerializer的字段中:

class EventSerializer(serializers.ModelSerializer):
    notes = NoteSerializer(many=True, read_only=True)

    class Meta:
        model = Event
        fields = ('id', 'name', 'description', 'coordinate', 'notes', 'timeline')

现在,如果您不在请求中发送timeline,DRF 将给出 ValidationError,表明您必须将其包含在内。

关于python - 500错误: null value in column "timeline_id" violates not-null constraint,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59077537/

相关文章:

python - 自 2.5 版以来日志记录的变化

python - 使用 Django 时查找查询源的推荐方法?

python - 值错误 : Don't mix *args and **kwargs in call to reverse()!

javascript - 从组件中的 useState 多次调用状态更新程序会导致多次重新渲染

python - 生成 lambda 函数组合的组合

python - Visual Studio 如何将 Python 模块添加到 Intellisense

python - 是否可以使用样式标签将 HTML 表格读入 Pandas ?

python - 调整当前代码以便能够将新表中的项目添加到购物篮中

javascript - 在 React 中父级触发的事件中将数据传递给子级

javascript - React Native : App Store Rejection, 支持 IPv6