嵌套tastypie UserProfileResource和UserResource,列\\“us

2019-10-17 17:27发布

这是我的设置:

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']

我想张贴到用户资源:

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\

Answer 1:

在POST请求tastypie是尝试从所请求的数据创建新的对象,但在配置文件对象所请求的数据没有为用户传递参数。 用户配置模式不允许空用户和服务器引发异常。

我会给你一些解决方案,因为我不知道究竟你的模型做的。

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

  2. 首先创建模型的用户,并有两个职位,用户配置模式之后。

  3. 实现自定义的方法,在一个职位创建用户和用户配置文件。


文章来源: Nesting tastypie UserProfileResource and UserResource, null value in column \\“user_id\\” violates not-null constraint