AttributeError:“ NoneType”对象没有属性“保存”

时间:2019-06-02 02:26:53

标签: python reactjs django-rest-framework axios

我试图使用react-facebook-login登录到Facebook,而不是存储数据,但这给了我关于“保存”的错误,我不明白为什么,我在其他应用程序中使用了完全相同的结构,工作正常,请您告诉我我做错了什么吗?

这是models.py代码:


class Social(EmbeddedDocument):
    name = StringField() 
    accountId = ReferenceField(Account)
    userId = StringField()
    project = ReferenceField(Project)
    email = EmailField()
    meta = {'allow_inheritance': True}
    add_date = DateTimeField(default=datetime.datetime.now)

    def save(self, *args, **kwargs):
        if not self.add_date:
            self.add_date = datetime.datetime.now()
        self.add_date = datetime.datetime.now()
        return super(Social, self).save(*args, **kwargs)

class Facebook(Social):
    pageId = StringField(unique=True)

views.py

class FacebookCreateView(APIView):
    permission_classes = (AllowAny,)
    def post(self, request):
        serializer = FacebookSerializer(data=request.data)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data, status=status.HTTP_201_CREATED)

        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

serializers.js

class FacebookSerializer(DocumentSerializer):
    class Meta:
        model = Facebook
        fields = ('name', 'accountId','userId','pageId','project','email')

    def create(self, validated_data):
        facebook_account = Facebook(
                        accountId=validated_data['accountId'],
                        name=validated_data['name'],
                        userId=validated_data['userId'],
                        pageId=validated_data['pageId'],
                        project=validated_data['project'],
                        email=validated_data['email'])
        facebook_account.save()
        return facebook_account

我打电话给的是

  responseFacebook = (response) => {  
  console.log(response);
  let data = new FormData(); // creates a new FormData object
    data.append('name', response.name);
    data.append('email', response.email);
    data.append('userId', response.userID);
    data.append('accountId', '5ced550e927bd2cfc01264bc');
    data.append('project', '5ce5acf4ec67314c53cae53e');
    data.append('pageId', 'tobeadded');
    axios.post('http://127.0.0.1:8000/social/fb/', data)
    .then(res => { if(res.status === 200){
      console.log(res)}})
    .catch(err=>console.log(err))
    //window.FB.logout();
  }

这给了我这个错误:

Internal Server Error: /social/fb/
Traceback (most recent call last):
  File "C:\Users\Kouter\Desktop\pfeCode\backend\env\lib\site-packages\django\core\handlers\exception.py", line 34, in inner
    response = get_response(request)
  File "C:\Users\Kouter\Desktop\pfeCode\backend\env\lib\site-packages\django\core\handlers\base.py", line 115, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "C:\Users\Kouter\Desktop\pfeCode\backend\env\lib\site-packages\django\core\handlers\base.py", line 113, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "C:\Users\Kouter\Desktop\pfeCode\backend\env\lib\site-packages\django\views\decorators\csrf.py", line 54, in wrapped_view
    return view_func(*args, **kwargs)
  File "C:\Users\Kouter\Desktop\pfeCode\backend\env\lib\site-packages\django\views\generic\base.py", line 71, in view
    return self.dispatch(request, *args, **kwargs)
  File "C:\Users\Kouter\Desktop\pfeCode\backend\env\lib\site-packages\rest_framework\views.py", line 495, in dispatch
    response = self.handle_exception(exc)
  File "C:\Users\Kouter\Desktop\pfeCode\backend\env\lib\site-packages\rest_framework\views.py", line 455, in handle_exception
    self.raise_uncaught_exception(exc)
  File "C:\Users\Kouter\Desktop\pfeCode\backend\env\lib\site-packages\rest_framework\views.py", line 466, in raise_uncaught_exception
    raise exc
  File "C:\Users\Kouter\Desktop\pfeCode\backend\env\lib\site-packages\rest_framework\views.py", line 492, in dispatch
    response = handler(request, *args, **kwargs)
  File "C:\Users\Kouter\Desktop\pfeCode\backend\social_accounts\views.py", line 17, in post
    serializer.save()
  File "C:\Users\Kouter\Desktop\pfeCode\backend\env\lib\site-packages\rest_framework\serializers.py", line 214, in save
    self.instance = self.create(validated_data)
  File "C:\Users\Kouter\Desktop\pfeCode\backend\social_accounts\serializers.py", line 18, in create
    facebook_account.save()
  File "C:\Users\Kouter\Desktop\pfeCode\backend\social_accounts\models.py", line 20, in save
    return super(Social, self).save(*args, **kwargs)
  File "C:\Users\Kouter\Desktop\pfeCode\backend\env\lib\site-packages\mongoengine\document.py", line 97, in save
    self._instance.save(*args, **kwargs)
AttributeError: 'NoneType' object has no attribute 'save'

1 个答案:

答案 0 :(得分:0)

Document代表MongoDB文档(即集合中的记录),Document类绑定到特定集合。 EmbeddedDocument表示嵌套在Document中的结构。

因此,根据设计,除非将EmbeddedDocument嵌入文档中,否则它不会附加到任何集合中。

这意味着您无法查询或保存EmbeddedDocument类,需要查询/保存父文档。

在您的情况下,您的EmbeddedDocument实例未附加到父Document类。

使您的Social类继承自Document而不是EmbeddedDocument,并且应该可以保存。