【问题标题】:IntegrityError at /quiz/api/quiz/ null value in column "owner_id" violates not-null constraint DETAIL/quiz/api/quiz/ 列“owner_id”中的空值的 IntegrityError 违反非空约束详细信息
【发布时间】:2019-10-17 17:04:33
【问题描述】:

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

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

serializer.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

【问题讨论】:

    标签: python django django-rest-framework serialization


    【解决方案1】:

    使用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']
    

    【讨论】:

      猜你喜欢
      • 2013-05-12
      • 1970-01-01
      • 1970-01-01
      • 2020-08-20
      • 2014-04-05
      • 2016-10-21
      • 2016-01-18
      • 2019-04-08
      • 2017-10-15
      相关资源
      最近更新 更多