我正在試圖找出如何對包含ManyToManyField的Django模型執行POST。除了拋出錯誤的類型錯誤(期望的pk值)的ManyToManyField之外,一切似乎都奏效。使用ManyToManyFiled向Django模型發佈POST錯誤類型。期望pk值,
我,我張貼到的主要模式是:
class Item(models.Model):
owner = models.ForeignKey(User, on_delete=models.CASCADE)
title = models.CharField(max_length=60, default='')
url = models.CharField(max_length=250, default='', unique=True)
keywords = models.ManyToManyField(Keyword, related_name='keywords')
相關的關鍵字模式是:
class Keyword(models.Model):
name = models.CharField(max_length=30)
def __str__(self):
return format(self.name)
的Djan去REST框架視圖的POST API調用:
class ItemViewSet(viewsets.ModelViewSet):
queryset = Item.objects.all().order_by('-date_added')
serializer_class = ItemSerializer
def perform_create(self, serializer):
creator = User.objects.get(pk=self.request.data['owner_id'])
the_keywords = self.request.data['keywords'].split
serializer.save(owner=creator)
serializer.save(keywords=the_keywords)
串行器是:
class ItemSerializer(serializers.ModelSerializer):
username = serializers.SerializerMethodField()
def get_username(self, obj):
value = str(obj.owner)
return value
def get_keywords(self, obj):
value = str(obj.keywords)
return value
class Meta:
model = Item
fields = ('id', 'url', 'item_type', 'title', 'keywords')
的JavaScript代碼,使POST API調用看起來像這樣:
submitImage(url,title,categories){
var userID = 18;
//console.log('in stuff');
let body = JSON.stringify({url: url, owner_id: serID, title: title, keywords: categories});
console.log('BODY: '+body);
let headers = new Headers();
headers.append('Content-Type', 'application/json');
this.http.post(API_ENDPOINT+'items/ ',
body, {
headers: headers
})
.map(res => res.json())
.subscribe(
data => {
},
err => {
alert('ERROR from submitImage() API call: ' + JSON.stringify(err));
},
() => {
}
);
});
}
調用此函數如下:
var categories = ['news','politics'];
submitImage('http://www.url.com/item','Test item',categories);
您是否嘗試過將'save_m2m = True'傳遞給您的保存方法?https://github.com/tomchristie/django-rest-framework/issues/1556 – noonkay
我會在哪裏做到這一點? –