2017-07-06 64 views
0

我使用Django的REST框架和我的serialiazers.pydjango.db.utils.IntegrityError:在列空值 - 但值不为空

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

    class Meta: 
     model = Meeting 
     fields = '__all__' 

models.pyMeeting模式是这样的:

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

然而,当我尝试做一个save()Meeting模型我得到这个错误:

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) 

在这两种情况下,会议组织者的目的不为空,它包含正确的价值观。

+0

在什么地方'User'在'Meeting'使用来自哪里? – Linovia

+0

@Linovia,道歉!我没有在我的问题中加入这个。它来自标准的django用户模型,并导入如:''from django.contrib.auth.models import User''。 – Galil

+0

只是一个想法,尝试在外键中设置'null = True'。 – bhansa

回答

0

您需要添加权限,如IsAuthenticated以确保该请求被验证。

否则,你会得到一个AnonymousUser,这将转化为None,我假设由于该参数是明确给出的,所以该模型的默认值不适用。

+0

在我的设置,我已'REST_FRAMEWORK = { “DEFAULT_PERMISSION_CLASSES”:( “rest_framework.permissions.IsAuthenticated”, ) } '我已经测试过,如果我没有验证我无法访问API。此外,在'models.py'中,'print(self.meeting_organiser.username)'返回右值(非空值)。 – Galil