如何在django-tastypie中为M2M关系添加资源

时间:2016-01-25 12:49:33

标签: django api rest tastypie

我尝试构建API以将某些对象保存到用户喜欢的内容。 我有这个用户档案的类:

class Profile(AbstractBaseUser, PermissionsMixin):

    email =             models.EmailField(blank=False, null=False, unique=True)
    first_name =        models.CharField(blank=True, null=True, max_length=255)
    last_name =         models.CharField(blank=True, null=True, max_length=255)

    # some enother fields    

    USERNAME_FIELD =    'email'
    REQUIRED_FIELDS =   ['first_name', 'last_name']

用于个人资料的tastypie-API:

class ProfileResource(ModelResource):

    class Meta:
        queryset =  Profile.objects.all()
        resource_name = 'profiles'
        allowed_methods = ['get', 'patch']
        authentication = Authentication()#MultiAuthentication(ApiKeyAuthentication(), SessionAuthentication())
        authorization = Authorization()

与简档相关的对象

class News(models.Model):
    title =         models.CharField(blank=False, null=False, max_length=255, verbose_name=u'Заголовок')
    add_to_favorite=models.ManyToManyField('profiles.Profile', related_query_name='favorite_news', blank=True)

class NewsResource(ModelResource):
    add_to_favorite = fields.OneToManyField(
        'profiles.api.ProfileResource',
        attribute='add_to_favorite',
        full=False, blank=True, null=True)    
    class Meta:
        queryset =  News.objects.all()
        resource_name = 'news'
        allowed_methods = ['get', 'patch']

现在我尝试执行此请求

{
  "id": 1,
  "add_to_favorite":[
    {"id":3}
  ]
}

得到错误:IntegrityError: column email is not unique

但是列电子邮件是唯一的。数据库中的所有电子邮件都是唯一的。 如何修复我的模型和资源来解决这个问题?

感谢名单!

1 个答案:

答案 0 :(得分:0)

您的要求

{
  "id": 1,
  "add_to_favorite":[
    {"id":3}
  ]
}

使用pk = 3创建News,使用pk = 3创建UserProfile

此请求:

{
  "id": 1,
  "add_to_favorite":['/api/v1/profile/3/']
}

使用pk = 1创建News并将UserProfile与pk = 3附加到add_to_favorite字段。