我对 Django 比较陌生,并且一直在努力通过 sweetpie REST API 实现自定义 django-taggit 应用程序。我对此进行了研究,并不断遇到同样的问题。感谢您提供的任何帮助和指导。
我有一个模型,我正在尝试使用 django-taggit 添加标签。我需要为每个标签添加一个 user_id,以便每个用户都拥有自己的标签列表。出于这个原因,我设置了一个直通模型,如下所示。这是我的模型的设置方式:
class Tags(TagBase):
user = models.ForeignKey('UserProfile')
class TaggedMedia(GenericTaggedItemBase):
tag = models.ForeignKey(Tags, related_name="tagged_items")
class Media(models.Model):
user = models.ForeignKey('UserProfile')
# All Other Media Fields
tags = TaggableManager(through=TaggedMedia)
这会按照我的想法设置数据库表,所以我觉得我走在正确的道路上。
现在,当我尝试通过 TastyPie 访问这些模型时,这就是我遇到问题的地方。我的模型资源设置如下:
class TaggedResource(ModelResource):
tags = ListField()
user = fields.ForeignKey(UserProfileResource, 'user')
class Meta:
queryset = Media.objects.all().order_by('-timestamp').distinct()
authorization = MediaAuthorization()
detail_allowed_methods = ['get', 'post', 'put', 'delete','patch']
def build_filters(self, filters=None):
if filters is None:
filters = {}
orm_filters = super(TaggedResource, self).build_filters(filters)
if 'tag' in filters:
orm_filters['tags__name__in'] = filters['tag'].split(',')
return orm_filters
def dehydrate_tags(self, bundle):
return map(str, bundle.obj.tags.all())
def save_m2m(self, bundle):
tags = bundle.data.get('tags', [])
bundle.obj.tags.set(*tags)
return super(TaggedResource, self).save_m2m(bundle)
现在。这适用于 2 个场景:
- 对带有标签过滤器的查询运行 GET 查询。
- 运行 PUT 查询以将现有标签添加到 TaggedMedia 表
但是,如果我使用不在标签表中的标签运行 PUT 查询,它将永远挂起并旋转而没有响应。
对不起,有史以来最长的问题,但希望细节能帮助你。:) 再次感谢!