2012-08-16 52 views
4

我正在为我的Django项目创建一个Tastypie API。我有在Django一个型号的models.py这样的:如何在Tastypie API中创建对象?

class User(models.Model): 
    nick = models.CharField(max_length = 255) 
    email = models.CharField(max_length = 511) 
    password = models.CharField(max_length = 63) 
    reg_date = models.DateTimeField('register date') 
    od_user = models.CharField(max_length = 1024) 

    def __unicode__(self): 
     aux = self.nick + " " + self.email 
     return aux 

,我也有一个像这样为我Tastypie API一个ModelResource:

class UserResource(ModelResource): 
    class Meta: 
     queryset = User.objects.all() 
     resource_name = 'user' 
     excludes = ['password'] 
     allowed_methods = ['get', 'post', 'put', 'delete'] 
     authorization = Authorization() 
     always_return_data=True 

    def obj_create(self, bundle, request=None, **kwargs): 
     username, password = bundle.data['nick'], bundle.data['password'] 
     try: 
      bundle.obj = User(nick, "[email protected]", password,timezone.now(),"od_test") 
      bundle.obj.save() 
     except IntegrityError: 
      raise BadRequest('That username already exists') 
     return bundle 

但这不起作用。我看过How to create or register User using django-tastypie API programmatically?,但我不知道如何在我的数据库中创建用户。

我用:

curl -v -H "Content-Type: application/json" -X POST --data '{"nick":"test2", "password":"alparch"}' http://127.0.0.1:8000/api/v1/user/?format=json 

做POST方法。

如何使用Tastypie API创建对象?

+0

如何在不工作?当你发布会发生什么?有错误吗? – 2012-08-16 11:23:23

+0

错误是:“error_message”:“int()的无效字面值为10:'test2'test2是我发布的昵称 – 2012-08-16 11:34:26

+0

您应该考虑使用'django.contrib.auth'中包含的'User'模型。通过编写自己的代码,你失去了一些功能 - 例如你正在存储一个未加密的密码,这是不安全的。 – Alasdair 2012-08-16 11:45:49

回答

2

不能创建与你有办法位置参数的用户:

User(nick, "[email protected]", password,timezone.now(),"od_test") 

相反,你必须使用关键字参数:

User(nick=nick, 
    email="[email protected]", 
    ... 
    ) 
+0

它工作完美!!再次感谢! – 2012-08-16 13:23:44