我正在发布一个我从 html 表单构建的 json 请求:
{"discipline":"Mathematiques","date":"2017-12-03"}
我正在使用这个 Django View 处理它:
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 constraint failed: cours_lesson.discipline_id
我是 Django 的新手,我不知道这是定义外键的正确方法,但这是我找到的唯一方法。
请您参考如下方法:
错误提示“NOT NULL 约束失败”。这意味着您的数据库表上没有任何值(value)。你必须像这样设置你的外键。
discipline = models.ForeignKey(Discipline, on_delete=models.CASCADE,null=True)
之后,迁移您的数据库。现在,在您的 Lesson 表中,discipline 行填充为 Null,以便您稍后可以将其设置为另一个变量。
