Python “列”中/quick/api/quick/null值处的IntegrityError;业主“身份证”;违反非空约束详细信息

Python “列”中/quick/api/quick/null值处的IntegrityError;业主“身份证”;违反非空约束详细信息,python,django,django-rest-framework,serialization,Python,Django,Django Rest Framework,Serialization,我试图发布测验,但出现了完整性错误 所有者字段未获取null而不是当前用户 序列化程序.py class QuizSerializer(serializers.ModelSerializer): owner = serializers.PrimaryKeyRelatedField(read_only=True, default=serializers.CurrentUserDefault() ) quiz_id = serializers.CharField(read_o

我试图发布测验,但出现了完整性错误

所有者字段未获取null而不是当前用户

序列化程序.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']
models.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)

views.py

使用
HiddenField
而不是
read_only=True
,请参阅:但这将使用户不出现在GET响应中,
只读
字段在输入中被忽略,请参阅 尝试:

class QuizSerializer(serializers.ModelSerializer):
所有者=序列化程序。PrimaryKeyRelatedField(只读=True)
quick\u id=serializers.CharField(只读=True)
def保存(**kwargs):
kwargs['owner']=self.context['request'].user

kwargs['quick_id']=“q'+secrets.令牌_hex(8)#使用
HiddenField
而不是
read_only=True
,请参阅:但这将使用户不出现在GET响应中,
只读
字段在输入中被忽略,请参阅 尝试:

class QuizSerializer(serializers.ModelSerializer):
所有者=序列化程序。PrimaryKeyRelatedField(只读=True)
quick\u id=serializers.CharField(只读=True)
def保存(**kwargs):
kwargs['owner']=self.context['request'].user
kwargs['quick_id']='q'+秘密。令牌(8)#
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']