【问题标题】:Django RestFramework - NOT NULL constraint failedDjango RestFramework - NOT NULL 约束失败
【发布时间】:2019-06-01 12:04:40
【问题描述】:

我的模特:

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 合并之后,但我没有注意到分支之间有任何差异

【问题讨论】:

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


    【解决方案1】:

    我的猜测是你的 sqlite 数据库被 git 跟踪。这意味着无论何时切换到损坏的分支,缺乏数据完整性都会导致此错误——即使应用程序代码完全相同。我建议将数据库文件添加到您的.gitignore,并改为查看 Django 的固定装置。

    【讨论】:

    • sqlite 数据库已经在 .gitignore 中。当合并请求被批准并且分支合并时。我已经完成了一个 bash 脚本来更新分支。我启动的命令是:git pullpip install -r requirements.txtpython manage.py migratepython manage.py test我不创建迁移,因为它们被跟踪
    【解决方案2】:

    这个错误意味着你没有在你的 post 有效负载中提供一个 home id,尽管这个错误应该在序列化程序级别被捕获,因为你在那里也指定了 required。之所以需要它是因为您在模型字段中指定为不可为空的字段

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

    如果您不希望它被要求指定 null=True,blank=True。您还需要确保家的存在。祝你好运。

    【讨论】:

    • mmh。我如何在序列化程序中检查这个?
    • 你的序列化程序也需要 true,所以我会删除它
    猜你喜欢
    • 1970-01-01
    • 2020-03-28
    • 2020-12-19
    • 2016-04-02
    • 2017-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-09
    相关资源
    最近更新 更多