Используя Django-taggit с django-rest-framework, я не могу сохранить свои теги

Я пытаюсь понять, почему, когда я отправляю свою форму, мои теги не сохраняются в моей базе данных. Довольно новый с django-rest-framework и Django-taggit тоже, я думаю, что делаю что-то не так :)

Во-первых, перед созданием моего API с помощью rest-framework я использовал общее представление (CreateView и UpdateView) для регистрации / проверки моего события. Это работало нормально, но я решил пойти дальше и попытаться создать API, так как сейчас я использую Angularjs.

Теперь мое модельное событие создано, но без моего тега, и у меня есть некоторые ошибки. Я поставил код и опишу свои ошибки после.

События / models.py

class Event(models.Model):
[...]

    title = models.CharField(max_length=245, blank=False)
    description = models.TextField(max_length=750, null=True, blank=True)
    start = models.DateTimeField()
    end = models.DateTimeField()
    created_at = models.DateTimeField(editable=False)
    updated_at = models.DateTimeField(editable=False)
    slug = AutoSlugField(populate_from='title', unique=True, editable=False)
    expert = models.BooleanField(choices=MODE_EXPERT, default=0)
    home = models.BooleanField(choices=HOME, default=0)
    nb_participant = models.PositiveSmallIntegerField(default=1)
    price = models.PositiveSmallIntegerField(default=0)
    cancelled = models.BooleanField(default=0)

    user = models.ForeignKey(User, editable=False, related_name='author')
    address = models.ForeignKey('Address', editable=False, related_name='events')
    participants = models.ManyToManyField(User, related_name='participants', blank=True, editable=False,
                                      through='Participants')
    theme_category = models.ForeignKey('EventThemeCategory', unique=True, editable=False)

    tags = TaggableManager(blank=True)

    class Meta:
        db_table = 'event'

    def save(self, *args, **kwargs):
        if not self.pk:
            self.created_at = timezone.now()
        self.updated_at = timezone.now()
        super(Event, self).save(*args, **kwargs)
    [...]

Я использую сериализаторы. HyperlinkedModelSerializer.

апи / serializer.py

from taggit.models import Tag

class TagListSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = Tag
        fields = ('url', 'id', 'name')


class EventSerializer(serializers.HyperlinkedModelSerializer):
    address = AddressSerializer()
    user = UserSerializer(required=False)
    tags = TagListSerializer(blank=True)

    class Meta:
        model = Event
        fields = ('url', 'id', 'title', 'description', 'start', 'end', 'created_at', 'updated_at', 'slug', 'expert','home', 'nb_participant', 'price', 'address', 'user', 'theme_category', 'tags')
        depth = 1

апи / просмотров / tags_views.py

from rest_framework import generics
from api.serializers import TagListSerializer
from taggit.models import Tag


class TagsListAPIView(generics.ListCreateAPIView):
    queryset = Tag.objects.all()
    model = Tag
    serializer_class = TagListSerializer


class TagsDetailAPIView(generics.RetrieveUpdateDestroyAPIView):
    queryset = Tag.objects.all()
    model = Tag
    serializer_class = TagListSerializer

апи / просмотров / events_views.py

class EventListAPIView(generics.ListCreateAPIView):
    queryset = Event.objects.all()
    model = Event
    serializer_class = EventSerializer
    paginate_by = 100

    def pre_save(self, obj):
        """
        Set the object's owner, based on the incoming request.
        """
        obj.user = self.request.user
        return super(EventListAPIView, self).pre_save(obj)

апи / urls.py

    url(r'^events/(?P<slug>[0-9a-zA-Z_-]+)/

Итак, во-первых, когда я звоню/ Апи / События / имя-моему-событие API прислал мне хороший ресурс с моими тегами. Метод GET работает нормально.

Я думал, что остальные рамки следуют за набором запросов. Так что, если я могу получить ресурс со всеми моими тегами, почему при использовании POST мои теги не регистрируются?

На самом деле у меня есть две проблемы с методом POST:

Во-первых, если я отправляю тег, который я уже создал, он отправляет мне сообщение об ошибке, в котором говорится, что тег должен быть уникальным. Я понимаю, что я не хочу создавать новый, я просто хочу, чтобы он был связан с моим объектом. У меня нет этой проблемы, когда я использую общий вид (это сделано по волшебству :) и все работает нормально)Во-вторых, когда я пытаюсь создать новый тег, мое новое событие сохраняется, но без моих тегов. Вы можете увидеть ответ, полученный angularjs для моего тега ... Он отправил мне имя тега, но без идентификатора, url (гиперссылка). Когда я проверил свою базу данных, тег не был создан.

Я думаю, что я должен сделать собственный get_queryset (self) в моем tags_views, но я не уверен. Я буду продолжать расследование. Если кто-то уже к этому и имеет некоторые советы, я буду очень API. Благодарю.

, EventDetailAPIView.as_view(), name='event-detail'),

Итак, во-первых, когда я звоню/ Апи / События / имя-моему-событие API прислал мне хороший ресурс с моими тегами. Метод GET работает нормально.

Я думал, что остальные рамки следуют за набором запросов. Так что, если я могу получить ресурс со всеми моими тегами, почему при использовании POST мои теги не регистрируются?

На самом деле у меня есть две проблемы с методом POST:

Во-первых, если я отправляю тег, который я уже создал, он отправляет мне сообщение об ошибке, в котором говорится, что тег должен быть уникальным. Я понимаю, что я не хочу создавать новый, я просто хочу, чтобы он был связан с моим объектом. У меня нет этой проблемы, когда я использую общий вид (это сделано по волшебству :) и все работает нормально)Во-вторых, когда я пытаюсь создать новый тег, мое новое событие сохраняется, но без моих тегов. Вы можете увидеть ответ, полученный angularjs для моего тега ... Он отправил мне имя тега, но без идентификатора, url (гиперссылка). Когда я проверил свою базу данных, тег не был создан.

Я думаю, что я должен сделать собственный get_queryset (self) в моем tags_views, но я не уверен. Я буду продолжать расследование. Если кто-то уже к этому и имеет некоторые советы, я буду очень API. Благодарю.

Ответы на вопрос(3)

Ваш ответ на вопрос