Usando o Django-taggit com o django-rest-framework, não consigo salvar minhas tags

Estou tentando descobrir por que, quando eu envio meu formulário, minhas tags não são salvas no meu banco de dados. Muito novo com o django-rest-framework e o Django-taggit também, acho que estou fazendo algo errado :)

Primeiro, antes de criar minha API com o resto da estrutura, eu estava usando uma exibição genérica (CreateView e UpdateView) para registrar / validar meu evento. Estava funcionando bem, mas decidi ir além e tentar criar uma API, pois agora estou usando o Angularjs.

Agora, meu evento de modelo é criado, mas sem minha tag e tenho alguns erros. Coloquei algum código e descreverei meus erros depois.

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

Estou usando o serializers.HyperlinkedModelSerializer.

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_-]+)/

Então, primeiro quando eu ligo/ api / events / nome-do-meu-evento a API me envia o bom recurso com minhas tags. O método GET está funcionando bem.

Eu estava pensando que o resto-framework segue o conjunto de consultas. Portanto, se eu posso obter o recurso com todas as minhas tags, por que, quando eu uso o POST, minhas tags não são registradas?

Na verdade, eu tenho dois problemas com o método POST:

primeiro, se eu enviar uma tag que eu já criei, ele me enviará um erro dizendo que a tag deve ser única. Entendo que não quero criar um novo, apenas quero que ele esteja vinculado ao meu objeto. Não tenho esse problema ao usar a exibição genérica (é feita por mágica :) e tudo está funcionando bem)Em segundo lugar, quando tento criar uma nova tag, meu novo evento é salvo, mas sem minhas tags. Você pode ver a resposta recebida por angularjs para minha tag ... Ele me enviou o nome da tag, mas sem id, url (hiperlink). Quando verifiquei meu banco de dados, a tag não foi criada.

Eu acho que tenho que fazer um get_queryset personalizado (self) em minhas tags_views, mas não tenho certeza. Vou continuar a investigar. Se alguém já fez isso e tem alguns conselhos, eu serei muito API. Obrigado.

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

Então, primeiro quando eu ligo/ api / events / nome-do-meu-evento a API me envia o bom recurso com minhas tags. O método GET está funcionando bem.

Eu estava pensando que o resto-framework segue o conjunto de consultas. Portanto, se eu posso obter o recurso com todas as minhas tags, por que, quando eu uso o POST, minhas tags não são registradas?

Na verdade, eu tenho dois problemas com o método POST:

primeiro, se eu enviar uma tag que eu já criei, ele me enviará um erro dizendo que a tag deve ser única. Entendo que não quero criar um novo, apenas quero que ele esteja vinculado ao meu objeto. Não tenho esse problema ao usar a exibição genérica (é feita por mágica :) e tudo está funcionando bem)Em segundo lugar, quando tento criar uma nova tag, meu novo evento é salvo, mas sem minhas tags. Você pode ver a resposta recebida por angularjs para minha tag ... Ele me enviou o nome da tag, mas sem id, url (hiperlink). Quando verifiquei meu banco de dados, a tag não foi criada.

Eu acho que tenho que fazer um get_queryset personalizado (self) em minhas tags_views, mas não tenho certeza. Vou continuar a investigar. Se alguém já fez isso e tem alguns conselhos, eu serei muito API. Obrigado.

questionAnswers(3)

yourAnswerToTheQuestion