2015-08-29 52 views
0

我剛剛實現了ModelViewSet類的create方法。在這個函數中,我將創建一個新的對象Event,並將其添加到manytomanyfield另一個對象Calendarevents,這裏是我的代碼:如何用django-rest-framework添加manytomanyfield

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

它的工作原理非常感謝。還有一個問題,在'add'操作之後我需要'calendar.save()'嗎?我不知道這個 –

+0

不,你不需要調用'save',在add之後它應該已經關聯了。 – beezz

相關問題