POST一个包含外键的json请求,并用django保存

时间:2016-02-07 13:11:52

标签: python json django

我发布了一个我从html表单构建的json请求:

{"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)

我的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:NOT NULL约束失败:cours_lesson.discipline_id

我是Django的新手,我不知道这是定义外键的正确方法,但这是我发现的唯一方法。

1 个答案:

答案 0 :(得分:1)

错误说" NOT NULL约束失败"。这意味着您在数据库表上没有任何价值。你必须像这样设置你的外键。

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

之后,迁移您的数据库。现在在Lesson表中,学科行用Null填充,以便稍后可以将它设置为另一个变量。