2013-09-03 3 views
1

У меня есть модель, в которой я продлить модель пользователя:Сообщение запроса для создания новых пользовательских пользователей в Django

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

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

я создаю также ресурсы для моего tastypie 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() 

Когда я пытаюсь создать новый пользователь, креатинфосфат запроса POST, используя завиток, я получил следующее:

->curl --dump-header - -H "Content-Type: application/json" -X POST --data '{"email": "[email protected]", "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, но я не знаю, как это исправить. Я проверил множество разных решений и не нашел для меня никакой работы.

Любые подсказки?

ответ

1

Ваши данные должны содержать User, к которым вы хотели бы приложить свой ReaderUser.

Если я правильно помню, вы должны представить полный объектное представление пользователя, как будет возвращен, если вы сделали, например: curl http://localhost:8000/api/user/1

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

Если у вас нет каких-либо User, хотя, вам нужно сначала создать его. Конечно, вы можете сделать это с помощью другого вызова API.

+0

Хорошо, но если я хочу создать пользователя-читателя, пользователь, которого он ассимилировал, еще не существует, что я должен давать в качестве пользователя? –

+0

@JeremyD Вы должны сначала создать пользователя или изменить определение модели. На данный момент для определения вашей модели требуется, чтобы «ReaderUser» был прикреплен к «User»: 'user = models.OneToOneField (User)' –

+0

Итак, если я хорошо понимаю, я могу найти способ создать пользователя непосредственно перед ReaderUser за один раз? –

0

Наконец-то я решил создать своего собственного пользователя, не полагаясь на модель пользователя. У меня есть оптимальный контроль над моей моделью, которая заставляет меня чувствовать себя более уверенно в том, что я делаю.

Тем не менее решение Томаса абсолютно верно. Я просто не хотел делать два запроса POST для создания одного кортежа в моей базе данных.

Смежные вопросы