【发布时间】:2017-06-14 00:12:10
【问题描述】:
我有一个模型,模型形式和视图如下:
@api_view(['POST'])
def addCigar(request):
print(request.POST)
form = CigarForm()
if request.POST:
form = CigarForm(request.POST)
if form.is_valid():
cigar.save()
cigar = Cigar.objects.filter(id=cigar.id)
serializer = CigarSerializer(cigar, many=True)
return Response(serializer.data)
else:
return Response("Form not valid, insert correct fields.")
表格:
class CigarForm(ModelForm):
class Meta:
model = Cigar
fields = ['brand','origin','shape', 'strength', 'aroma', 'notes', 'rating', ]
型号:
class Cigar(models.Model):
brand = models.CharField(max_length=50, blank=False,)
origin = models.CharField(max_length=30, blank=False,)
shape = models.CharField(max_length=20, blank=False,)
strength = models.CharField(max_length=20, blank=False,)
aroma = models.CharField(max_length=20, blank=False,)
notes = models.CharField(max_length=100, blank=False,)
rating = models.IntegerField(null=True, )
我的 angular2 前端服务:
public addCigar(
brand: string,
origin: string,
shape: string,
strength: string,
aroma: string,
notes: string,
rating: number) {
console.log("In service")
let obj = new CigarModel(brand, origin, shape, strength, aroma, notes, rating);
let body = JSON.stringify(obj);
console.log(body)
let headers = new Headers({ 'Content-Type': 'application/json; charset=utf-8' });
let options = new RequestOptions({ headers: headers });
return this.http.post(this.myUrl + 'api/cigar/add/', body, options)
.toPromise()
.then(response => response.json())
}
然而,这给了我表单无效错误。视图中的打印语句打印<QueryDict: {}>,服务正文中的console.log打印{"brand":"Nitish","origin":"India","shape":"Thin","strength":"Strong","aroma":"Wood","notes":"Good","rating":"4"}
我在这里做错了什么?我的前端或后端有问题吗?
更新:我现在使用 request.data 代替 request.POST
【问题讨论】:
-
我看到的关于 body 的所有示例,对于 angular 2 都是这样的: var body = 'username=myusername&password=mypassword';尝试将您的 json 字符串转换为该字符串。 param1=value_param1¶m2=value_param2 等
-
有什么函数或参数可以这样转换吗?而不是 JSON.stringyfy()?
-
你所有的导入都好吗?对于标题?
-
您可以在 addCigar 函数中打印(请求)并向我们展示结果吗
-
这就是我从浏览器控制台发送的请求:{"brand":"Nitish","origin":"Spain","shape":"Thin","strength":"Strong" “香气”:“木材”,“笔记”:“好”,“评级”:“4”}。 django 视图中的 Print(request.data) 给了我 {u'origin': u'India', u'rating': u'4', u'strength': u'Strong', u'brand': u'Nitish ', u'aroma': u'Wood', u'shape': u'Thin', u'notes': u'Good'}
标签: django angular django-rest-framework