Al usar Django-taggit con django-rest-framework, no puedo guardar mis etiquetas

Estoy intentando averiguar por qué cuando envío mi formulario, mis etiquetas no se guardan en mi db. Bastante nuevo con el django-rest-framework y Django-taggit también, creo que estoy haciendo algo mal :)

Primero, antes de hacer mi API con el marco de descanso, estaba usando una vista genérica (CreateView y UpdateView) para registrar / validar mi evento. Estaba funcionando bien, pero decidí ir más lejos y tratar de construir una API ya que estoy usando Angularjs ahora.

Ahora mi evento modelo está creado pero sin mi etiqueta y tengo algunos errores. Pongo un código y luego describiré mis errores.

eventos / modelos.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)
    [...]

Estoy usando los serializadores. HiperlinkedModelSerializer.

api / 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

api / views / 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

api / views / 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)

api / urls.py

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

Así que primero cuando llamo/ api / eventos / nombre de mi evento La API me envía el buen recurso con mis etiquetas en él. El método GET está funcionando bien.

Estaba pensando que el marco de descanso sigue el conjunto de consultas. Entonces, si puedo obtener el recurso con todas mis etiquetas, ¿por qué cuando uso POST mis etiquetas no están registradas?

En realidad tengo dos problemas con el método POST:

primero, si envío una etiqueta que ya he creado, él me envió un error que dice que la etiqueta debe ser única. Entiendo que, no quiero crear uno nuevo, solo quiero que se vincule con mi objeto. No tengo este problema cuando uso la vista genérica (está hecha por magia :) y todo funciona bien)En segundo lugar, cuando intento crear una nueva etiqueta, mi nuevo evento se guarda pero sin mis etiquetas. Puede ver la respuesta recibida por angularjs para mi etiqueta ... Me envió el nombre de la etiqueta pero sin identificación, url (con hipervínculo). Cuando comprobé mi db la etiqueta no se ha creado.

Creo que tengo que hacer un get_queryset (auto) personalizado en mis tags_views pero no estoy seguro. Voy a seguir investigando. Si alguien ya lo ha hecho y tiene algunos consejos, seré muy API. Gracias.

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

Así que primero cuando llamo/ api / eventos / nombre de mi evento La API me envía el buen recurso con mis etiquetas en él. El método GET está funcionando bien.

Estaba pensando que el marco de descanso sigue el conjunto de consultas. Entonces, si puedo obtener el recurso con todas mis etiquetas, ¿por qué cuando uso POST mis etiquetas no están registradas?

En realidad tengo dos problemas con el método POST:

primero, si envío una etiqueta que ya he creado, él me envió un error que dice que la etiqueta debe ser única. Entiendo que, no quiero crear uno nuevo, solo quiero que se vincule con mi objeto. No tengo este problema cuando uso la vista genérica (está hecha por magia :) y todo funciona bien)En segundo lugar, cuando intento crear una nueva etiqueta, mi nuevo evento se guarda pero sin mis etiquetas. Puede ver la respuesta recibida por angularjs para mi etiqueta ... Me envió el nombre de la etiqueta pero sin identificación, url (con hipervínculo). Cuando comprobé mi db la etiqueta no se ha creado.

Creo que tengo que hacer un get_queryset (auto) personalizado en mis tags_views pero no estoy seguro. Voy a seguir investigando. Si alguien ya lo ha hecho y tiene algunos consejos, seré muy API. Gracias.

Respuestas a la pregunta(3)

Su respuesta a la pregunta