gpt4 book ai didi

python - IntegrityError at/quiz/api/quiz/null 列 "owner_id"中的值违反了非空约束详细信息

转载 作者:太空宇宙 更新时间:2023-11-03 20:16:07 25 4
gpt4 key购买 nike

我正在尝试发布测验,但出现完整性错误。

所有者字段不为空,而不是当前用户

序列化器.py

class QuizSerializer(serializers.ModelSerializer):
owner = serializers.PrimaryKeyRelatedField(read_only=True, default=serializers.CurrentUserDefault()
)
quiz_id = serializers.CharField(read_only=True, default='q'+secrets.token_hex(8))
class Meta:
model = Quiz
fields = ['quiz_id', 'owner', 'title', 'description']

模型.py

class Quiz(models.Model):

quiz_id = models.CharField(max_length=50,primary_key=True,null=False)
owner = models.ForeignKey(User, on_delete=models.CASCADE,null=False)
title = models.CharField(max_length=50,null=False)
description = models.TextField(max_length=200,blank=True)
timestamp = models.DateTimeField(default=timezone.now)
is_live = models.BooleanField(default=False)

View .py

最佳答案

使用HiddenField而不是read_only=True,请参阅:https://www.django-rest-framework.org/api-guide/validators/#currentuserdefault但这将使用户不​​会出现在 GET 响应中,输入中的 read_only 字段将被忽略,请参阅 https://www.django-rest-framework.org/api-guide/fields/#read_only尝试:

class QuizSerializer(serializers.ModelSerializer):
owner = serializers.PrimaryKeyRelatedField(read_only=True)
quiz_id = serializers.CharField(read_only=True)

def save(**kwargs):
kwargs['owner'] = self.context['request'].user
kwargs['quiz_id'] = 'q'+secrets.token_hex(8) # <-- you can have this as a default in model
super().save(**kwargs)

class Meta:
model = Quiz
fields = ['quiz_id', 'owner', 'title', 'description']

关于python - IntegrityError at/quiz/api/quiz/null 列 "owner_id"中的值违反了非空约束详细信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58437572/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com