Столбец 'post_id' не может быть пустым - PullRequest
0 голосов
/ 06 ноября 2019

Столбец 'post_id' не может быть нулевым

Я не знаю, почему я не могу вывести post_id. Если вы попытаетесь добавить комментарий, вы не сможете вывести post_id. Я не могу решить это. Пожалуйста, помогите мне.

models.py


class Comment(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    post = models.ForeignKey(Post, on_delete=models.CASCADE)

serializers.py


class CommentSerializer(serializers.ModelSerializer):
    user = UserSerializer(read_only=True)
    post = PostSerializer(read_only=True)

    class Meta:
        model = Comment
        fields = (
            'user',
            'post',
            'id',
            'content',
        )
        read_only_fields = ('created_at',)

views.py

# api/views.py


class CommentView(viewsets.ModelViewSet):
    queryset = Comment.objects.all()
    serializer_class = CommentSerializer
    permission_classes = (permissions.IsAuthenticated,)
    def perform_create(self, serializer):
        serializer.save(user=self.request.user)



Ответы [ 2 ]

1 голос
/ 06 ноября 2019

Замените код следующим кодом.

class Comment(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE, null=True)
    post = models.ForeignKey(Post, on_delete=models.CASCADE, null=True)

После замены кода выполните миграцию и повторите попытку

0 голосов
/ 06 ноября 2019

Модель Comment имеет отношение внешнего ключа к модели Post. Поэтому, если вы создаете новый комментарий, должно быть установлено значение для Post (post_id). Вы можете сделать это в вашем сериализаторе или в вашем методе execute_create в наборе.

В следующем примере я предполагаю, что поле с post id в качестве значения имеет имя post. И я не добавил проверки для получения сообщения.

Пример:

class CommentSerializer(serializers.ModelSerializer):
    user = UserSerializer(read_only=True)
    post = PostSerializer(read_only=True)

    def create(self, validated_data):
        instance = super().create(validated_data)
        instance.post = Post.objects.get(id=self.initial_data['post'])
        instance.save()

        return instance

    class Meta:
        model = Comment
        fields = (
        'user',
        'post',
        'id',
        'content',
        )
        read_only_fields = ('created_at',)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...