IntegrityError в / quiz / api / quiz / null-значении в столбце "owner_id" нарушает ненулевое ограничение ПОДРОБНЕЕ - PullRequest
1 голос
/ 17 октября 2019

Я пытаюсь опубликовать тест, но получаю ошибку целостности.

поле владельца не получает значение NULL вместо текущего пользователя

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

моделей. 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

1 Ответ

0 голосов
/ 17 октября 2019

Используйте 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 try:

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']
...