Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 发布一个包含外键的json请求,并用django保存它_Python_Json_Django - Fatal编程技术网

Python 发布一个包含外键的json请求,并用django保存它

Python 发布一个包含外键的json请求,并用django保存它,python,json,django,Python,Json,Django,我发布了一个json请求,该请求是从html表单生成的: {"discipline":"Mathematiques","date":"2017-12-03"} 我使用这个Django视图来处理这个问题: def cours_list(request): if request.method == 'POST': data = JSONParser().parse(request) serializer = LessonSerializer(data=dat

我发布了一个json请求,该请求是从html表单生成的:

{"discipline":"Mathematiques","date":"2017-12-03"}
我使用这个Django视图来处理这个问题:

def cours_list(request):
    if request.method == 'POST':

       data = JSONParser().parse(request)

       serializer = LessonSerializer(data=data)

       if serializer.is_valid():
          serializer.save()
          return JSONResponse(serializer.data, status=201)

       return JSONResponse(serializer.errors, status=400)
My models.py包含:

class Discipline(models.Model):
    name = models.CharField(max_length=200)


class Lesson(models.Model):
    discipline = models.ForeignKey(Discipline, on_delete=models.CASCADE)
    date = models.DateField()
    regular_slot = models.BooleanField(default=False)
我的序列化程序编写如下:

class DisciplineSerializer(serializers.ModelSerializer):
    class Meta:
        model = Discipline
        fields = ('name')

class LessonSerializer(serializers.ModelSerializer):
    discipline = serializers.RelatedField(source='Discipline', read_only=True);
    class Meta:
       model = Lesson
       fields = ('discipline', 'date', 'regular_slot')
但是,我有一个错误是:

django.db.utils.IntegrityError:非空约束失败:课程\课程\规程\ id

我是Django新手,我不认为这是定义外键的正确方法,但这是我找到的唯一方法

错误表示“非空约束失败”。这意味着您的数据库表上没有任何值。你必须这样设置你的外键

discipline = models.ForeignKey(Discipline, on_delete=models.CASCADE,null=True)

之后,迁移数据库。现在在您的课程表中,规程行用Null填充,以便以后可以将其设置为另一个变量。

您使用的是
django rest framework
?如果是这样,请查看,以了解在序列化程序中处理关系字段的正确方法。您什么时候收到错误?你能发布完整的回溯吗?如果在加载/反序列化json时发生这种情况,也可以发布json。如果试图保存
课程
对象而不指定相关的
规程
,则可能会发生这种情况。如果再次出现错误,请添加blank=True。我不确定没有这个它是否有效。