嵌套tastypie UserProfileResource和UserResource,列\“user_id \”中的空值违反非空约束

时间:2013-02-20 08:00:56

标签: django user-profile tastypie

这是我的设置:

class UserProfile(models.Model):
    user = models.OneToOneField(User, unique=True, related_name="profile")

class UserProfileResource(ModelResource):
    class Meta:
        queryset = UserProfile.objects.all()
        resource_name = 'profile'
        authorization = Authorization()

class UserResource(ModelResource):
    profile = fields.ToOneField(UserProfileResource, attribute='userprofile', related_name='user', full=True, null=True)
    class Meta:
       queryset = User.objects.all()
       resource_name = 'user'
       authorization = Authorization()
       list_allowed_methods = ['get', 'post']

我正在尝试POST到用户资源:

curl --dump-header - -H "Content-Type: application/json" -X POST --data '{"username":"tata","password":"poooo","profile":{"home_zipcode": "95124"}}' http://192.168.1.103:8000/api/v1/user/

但是得到以下错误:

"error_message": "null value in column \"user_id\" violates not-null constraint\

1 个答案:

答案 0 :(得分:0)

在POST请求上,tastypie尝试从请求的数据创建新对象,但在请求的配置文件对象数据中,您不会为用户传递参数。 UserProfile模型不允许用户为null,服务器引发异常。

我会给你一些解决方案,因为我不知道你的模特到底做了什么。

  1. class UserProfile(models.Model): user = models.OneToOneField(User, unique=True, null=True, related_name="profile")

  2. 首先创建模型用户,然后创建具有两个帖子的UserProfile模型。

  3. 实现自定义方法,在一个帖子中创建用户和用户个人资料。