Я относительно новичок в Django и действительно боролся с реализацией пользовательского приложения django-taggit через REST API. Я исследовал это и продолжаю сталкиваться с теми же проблемами. Я ценю любую помощь и рекомендации, которые вы можете предоставить.
У меня есть модель, в которую я пытаюсь добавить теги с помощью 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 с тегом, которого еще нет в таблице тегов, он будет зависать и вращаться вечно без ответа.
Извините, самый длинный вопрос, но, надеюсь, подробности помогут вам помочь мне. :) Спасибо еще раз!