Django RestFramework - сбой ограничения NOT NULL - PullRequest
0 голосов
/ 06 января 2019

Моя модель:

class Wishlist(models.Model):
    home = models.ForeignKey(Home, on_delete=models.CASCADE, null=False, blank=False)
    user = models.ForeignKey(User, on_delete=models.CASCADE, null=False, blank=False)

    def __str__(self):
        return "{} - {}".format(self.user.username, self.home.address)

    class Meta:
        ordering = ('user',)

Мой сериализатор

class WishlistSerializer(serializers.ModelSerializer):

    home = serializers.RelatedField(required=True, queryset=home_models.Home.objects.all())
    user = serializers.RelatedField(required=True, queryset=User.objects.all())

    class Meta:
        model = Wishlist
        fields = ('id', 'user', 'home',)

My View

class WishlistAdd(CreateAPIView):
    """
    Add a new Home in User wishlist
    """

    serializer_class = serializers.UserWishlistSerializer
    queryset = Wishlist.objects.all()

Когда я пытаюсь выполнить запрос POST для создания новой записи, я получаю следующую ошибку: IntegrityError at /user/wishlist/ NOT NULL constraint failed: user_wishlist.home_id

Все это происходит после git-слияния, но я не замечаю различий между ветвями

Ответы [ 2 ]

0 голосов
/ 07 января 2019

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

home = models.ForeignKey(Home, on_delete=models.CASCADE, null=False, blank=False)

если вы не хотите, чтобы это требовалось, укажите null = True, пусто = True. Также вам нужно убедиться, что дом существует. удачи.

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

Я предполагаю, что ваша база данных sqlite отслеживается git. Это означает, что всякий раз, когда вы переключаетесь на разорванную ветвь, отсутствие целостности данных вызывает эту ошибку, даже если код приложения совершенно одинаков. Я рекомендую добавить файл базы данных к вашему .gitignore и вместо этого посмотреть на приборы Django.

...