Django RestFramework-NOT NULL约束失败

时间:2019-01-06 17:11:44

标签: django django-models django-rest-framework django-views

我的模特:

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',)

我的观点

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 :(得分:0)

我的猜测是git跟踪了您的sqlite数据库。这意味着每当您切换到断开的分支时,数据完整性不足都​​会导致此错误-即使应用程序代码完全相同。我建议将数据库文件添加到您的.gitignore中,然后查看Django的固定装置。

答案 1 :(得分:0)

该错误表示您没有在帖子有效载荷中提供家庭ID,尽管应该在序列化程序级别上捕获此错误,因为您也在那里指定了此要求。之所以需要它,是因为您在模型字段中将其指定为不可为空的字段

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

如果您不希望使用它,请指定null = True,空白= True。另外,您还需要确保房屋存在。祝你好运。