2015-08-29 2 views
0

Я только что внедрил метод create класса ModelViewSet. В этой функции, я буду создавать новый объект Event, и добавить его в ManyToManyField events другого объекта Calendar, Вот мой код:Как добавить manytomanyfield с django-rest-framework

def create(self, request, calendar_pk=None): 
    calendar = get_object_or_404(Calendar, guid=calendar_pk) 
    serializer = EventSerializer(data=request.data) 
    if serializer.is_valid(): 
     serializer.save() 

     # if remove this two lines, it works well 
     calendar.events.add(serializer) 
     calendar.save() 

     return Response(serializer.data, status=status.HTTP_201_CREATED) 
    return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) 

это просто поднимем ниже исключения

IntegrityError 
(1062, "Duplicate entry 'e1c4570899d149e8b093773feb208328-EventSerializer(data=<QueryDict' for key 'calendar_id'") 
/usr/lib/python2.7/dist-packages/MySQLdb/connections.py in defaulterrorhandler, line 36 

Как исправить Эта проблема?

ответ

0

Я думаю, что ваша проблема в том, что вы пытаетесь использовать add a serializer, а не экземпляр Event.

event = serializer.save() 
calendar.events.add(event) 
+0

это работает, большое спасибо. Еще один вопрос: мне нужно «calendar.save()» после операции «добавить»? Я не уверен в этом –

+0

Нет, вам не нужно вызывать 'save', после' add' он должен быть уже связан. – beezz

Смежные вопросы