POST to Django 模型与 ManyToManyFiled 给出不正确的类型.预期 pk 值,
POST to Django model with ManyToManyFiled gives Incorrect type. Expected pk value,
我正在尝试研究如何对包含ManyToManyField的Django模型进行POST。一切似乎都正常,除了 ManyToManyField 抛出不正确的类型错误(预期的 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)
POST API 调用的 Django REST 框架视图是:
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')
进行 POST API 调用的 Javascript 代码如下所示:
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);
class keywordSerializer(serializers.ModelSerializer):
class Meta:
model:Keyword
fields:('name')
class ItemSerializer(serializers.ModelSerializer):
keywords = keywordSerializer()
class Meta:
model = Item
fields = ('id', 'url', 'item_type', 'title', 'keywords')
您的视图将如下所示:
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)
相关文章:
- 为什么会出现错误;未捕获的类型错误:undefined不是函数;
- AngularJS:ng之后,重复$scope值未按预期更新
- 如何在DOM元素上按类型构建此函数
- 同样,同样的错误'ahorcado.js:26未捕获类型错误:无法读取属性'beginPath'
- YUI3 IO实用程序是否可以根据给定的内容类型标头值自动序列化数据
- Webpack/Rect:遵循egghead.io教程,但出现错误:您可能需要一个合适的加载程序来处理此文件类型
- 另一个ajax调用中的Jquery ajax调用在for循环中没有按预期工作
- 如何从querySelectorAll中获取按钮类型
- 如何在输入字段中的按钮的帮助下打开日历,该字段的类型为“=”;日期”;
- 如何将具有文本类型值的var放入jQuery函数中
- javascript解释器如何理解变量的数据类型
- 操作员类型未按预期操作
- POST to Django 模型与 ManyToManyFiled 给出不正确的类型.预期 pk 值,
- 表单未按预期提交输入类型:文件
- Babel React 转换:属性值预期的字符串类型,但得到空
- 预期的内容类型为'application/javascript'HtmlUnitDriver中
- 将base64中的图像发送到Web服务-'应用程序/八位字节流'不是预期的类型'text/xml
- 反应.js - “不变冲突:元素类型无效:预期字符串”简单按钮
- Spring Data JPA 接收参数值 [2] 与预期类型 [java.lang.String (n/a)] 不匹配
- Screeps 内置函数不返回预期的类型