django - django.db.utils.IntegrityError:在 POST 请求中
问题描述
我正在创建一个 post 函数来将数据保存在模型中,代码如下:
视图.py
class take_quizapi(CreateAPIView):
def post(self, request,pk, *args, **kwargs):
supplier = request.user.supplier
data = request.data.copy()
data["supplier_id"] = supplier.user_id
data["score"] = 0
data["quiz"] = pk
print("data is", data)
serializer = takenquizSerializer(data=data)
if serializer.is_valid():
serializer.save()
print("Serializer data", serializer.data)
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
当我从邮递员那里调用 API 时,它说:
django.db.utils.IntegrityError:“supplier_id”列中的空值违反非空约束
但我显然提供了data["supplier_id"] = supplier.user_id
. 我在这里做错了什么?
序列化程序.py
class takenquizSerializer(serializers.ModelSerializer):
supplier = ReadOnlyField(source='supplier.supplier_fname')
class Meta:
model = TakenQuiz
fields = "__all__"
模型.py
class TakenQuiz(models.Model):
supplier = models.ForeignKey(Supplier, on_delete=models.CASCADE, related_name='taken_quizzes')
quiz = models.ForeignKey(Quiz, on_delete=models.CASCADE, related_name='taken_quizzes')
score = models.FloatField()
date = models.DateTimeField(auto_now_add=True)
least_bid = models.IntegerField(default=0)
confirmed = models.CharField(max_length=100, default='Not Confirmed')
解决方案
supplier
是一个只读字段。所以没有必要将它添加到数据字典中,因为它永远不会被使用。
无论如何,您都不应该修改帖子数据 - 有一个不可变的原因。而是在保存时将其传递:
serializer = takenquizSerializer(data=request.data)
if serializer.is_valid():
serializer.save(supplier_id=supplier.user_id, score=0, quiz=pk)
推荐阅读
- ruby-on-rails - How can I run a private method in a module in rails console?
- python-3.x - 需要帮助使用 Beautiful Soup 遍历 URL
- python - 让 VectorAssembler 总是选择 DenseVector
- c# - 多个项目的通用菜单母版页
- elasticsearch - 多行的 Grok 模式不起作用
- java - 使用 Java 每行/行打印 10 位数字
- ios - Swift 和 SpriteKit:如何使用 SKShapeNode 实现非模糊圆形计时器
- java - 当嵌套枚举在其构造函数中引用父静态成员时,为什么我会得到 NPE?
- excel - 如何突出显示不包含任何列中特定文本的单元格
- javascript - 在一个页面上重复复制一个表格是否不合适?