【问题标题】:django.db.utils.IntegrityError: null value in column - but value is not nulldjango.db.utils.IntegrityError:列中的空值 - 但值不为空
【发布时间】:2017-07-06 11:23:11
【问题描述】:

我正在使用 Django Rest Framework 并在我的 serialiazers.py

class MeetingSerializer(serializers.ModelSerializer):
    meeting_organiser = serializers.HiddenField(default=serializers.CurrentUserDefault())

    class Meta:
        model = Meeting
        fields = '__all__'

我的models.py 中的Meeting 模型是这样的:

class Meeting(models.Model):
    [some fields here...]
    meeting_organiser = models.ForeignKey(User, default=1)
    [more fields here...]

但是,当我尝试对 Meeting 模型执行 save() 时,出现此错误:

django.db.utils.IntegrityError: null value in column "meeting_organiser" violates not-null constraint

我尝试调试并添加在serializers.py:

def save(self):
    print(self.validated_data)

models.py:

def save(self, *args, **kwargs):
    print(self.meeting_organiser.username)

在这两种情况下,会议组织者对象都不为空,并且包含正确的值。

【问题讨论】:

  • Meeting中使用的User从何而来?
  • @Linovia,抱歉!我没有在我的问题中添加这个。它来自标准的 django 用户模型,并像这样导入:from django.contrib.auth.models import User
  • 只是一个想法,尝试在外键中设置null=True
  • @Bhansa,我设置了null=True,然后迁移了,但我仍然遇到同样的错误。然后我删除了迁移,再次迁移但仍然出现同样的错误。

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


【解决方案1】:

您需要添加IsAuthenticated 等权限,以确保请求通过身份验证。

否则,你会得到一个AnonymousUser,它会转换为None,我假设这个参数是明确给出的,模型的默认值不适用。

【讨论】:

  • 在我的设置中,我设置了REST_FRAMEWORK = { 'DEFAULT_PERMISSION_CLASSES': ( 'rest_framework.permissions.IsAuthenticated', ) } ,并且我已经测试过如果我没有通过身份验证,我将无法访问 API。此外,在models.py 中,print(self.meeting_organiser.username) 返回正确的(非空)值。
猜你喜欢
  • 2016-09-11
  • 2020-03-15
  • 1970-01-01
  • 1970-01-01
  • 2021-12-06
  • 2016-04-04
  • 2016-01-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多