1

我有一个模型,我在其中扩展了用户模型:

class ReaderUser(models.Model):
        user = models.OneToOneField(User)
        email = models.EmailField()                                                                     

        def __unicode__(self):                                                                          
          return self.user.first_name + ',' + str(self.email)

我还为我的美味派 API 创建了资源:

class CreateReaderUserResource(ModelResource):
    user = fields.OneToOneField('UserResource', 'user', full=False)                                 

    class Meta:
        allowed_methods = ['post']                                                                  
        always_return_data = True
        authentication = Authentication()                                                           
        authorization = Authorization()                                                             
        queryset = ReaderUser.objects.all()                                                         
        resource_name = 'newuser'


class ReaderUserResource(ModelResource):
    class Meta:
        queryset = ReaderUser.objects.all()
        allowed_methods = ['get, put, patch']
        resource_name = 'ruser'                                                                     


class UserResource(ModelResource):                                                                  
    raw_password = fields.CharField(attribute=None, readonly=True, null=True,                       
                                      blank=True)                                                     

    class Meta:
        authentication = MultiAuthentication(
            BasicAuthentication(),
            ApiKeyAuthentication())
        authorization = Authorization()

        allowed_methods = ['get', 'patch', 'put']
        always_return_data = True
        queryset = User.objects.all()

当我尝试通过使用 curl 创建 POST 请求来创建新用户时,我得到以下信息:

 ->curl --dump-header - -H "Content-Type: application/json" -X POST --data '{"email": "test@test.com", "password": "groscaca"}' http://localhost:8000/api/newuser/
HTTP/1.0 404 NOT FOUND
Date: Tue, 03 Sep 2013 21:17:28 GMT
Server: WSGIServer/0.1 Python/2.7.1
Content-Type: application/json

\"/Users/jrm/Documents/Perso/simplereader/env/lib/python2.7/site-packages/django/db/models/fields/related.py\", line 389, in __get__\n    
raise self.field.rel.to.DoesNotExist\n\nDoesNotExist\n"}

我究竟做错了什么?我尝试让设置尽可能简单。我知道问题来自 OneToOneField 关键字,但我不知道如何解决。我检查了许多不同的解决方案,但没有找到任何适合我的解决方案。

有什么提示吗?

4

2 回答 2

1

您的数据需要包含User您想要附加到的数据ReaderUser

如果我没记错的话,你应该提交用户的完整对象表示,如果你这样做会返回例如:curl http://localhost:8000/api/user/1

curl --dump-header - -H "Content-Type: application/json" -X POST --data '{"email": "test@test.com", "password": "", "user": {"blah"}}' http://localhost:8000/api/newuser

如果你没有User,你需要先创建一个。您当然可以通过另一个 API 调用来执行此操作。

于 2013-09-03T21:46:54.227 回答
0

我最终决定创建自己的用户,而不依赖于 User 模型。我对我的模型进行了最佳控制,这让我对自己的工作更有信心。

尽管如此,托马斯的解决方案是完全正确的。我只是不想做两个 POST 请求来在我的数据库中创建一个元组。

于 2013-09-04T18:21:11.533 回答