Javascript 使用ImageField在Ajax中序列化(表单)
我的模型中有一个名为Javascript 使用ImageField在Ajax中序列化(表单),javascript,ajax,django,django-rest-framework,Javascript,Ajax,Django,Django Rest Framework,我的模型中有一个名为Post的forms.ImageField。当我创建它的一个实例时,我通过Ajax来实现,同时使用data=$(this).serialize()将序列化数据发布到我的PostCreateAPIView,这是Django REST Framework的一个通用API CreateView,但此方法只序列化数据,而忽略我的映像 这是我的密码: 我的CreateAPIView: class PostCreateAPIView(generics.CreateAPIView):
Post
的forms.ImageField
。当我创建它的一个实例时,我通过Ajax来实现,同时使用data=$(this).serialize()
将序列化数据发布到我的PostCreateAPIView
,这是Django REST Framework的一个通用API CreateView,但此方法只序列化数据,而忽略我的映像
这是我的密码:
我的CreateAPIView:
class PostCreateAPIView(generics.CreateAPIView):
serializer_class = PostModelCreateSerializer
permission_classes = [permissions.IsAuthenticated]
def perform_create(self, serializer):
print(self)
serializer.save(user = self.request.user)
我的表格:
class PostModelCreateForm(forms.ModelForm):
content = forms.CharField(
label="",
help_text="",#text to help
widget=forms.Textarea( attrs={
'cols' : "50", #size
'rows' : "6", #size
'placeholder' : 'Votre publication',
'style' : 'resize : none'
}))
group = forms.ChoiceField(choices=USER_GROUPS, label='')
class Meta:
model = Post #we define the model
fields = [
"content",
"group",
"photo"
]
$(document.body).on(“提交”、“发布表单”类),函数(事件){
event.preventDefault();
这个uu=$(这个);
var formData=this.serialize();
$.ajax({
方法:“张贴”,
url:createpostrl,
数据:formData,
成功:功能(数据){
},
错误:函数(数据){
}
});
});代码>
集团*新商业区司法区和新商业区
照片
多亏了卢卡,以下是答案:
$(document.body).on("submit", ".post_form_class",function(event){
event.preventDefault();
var formData = new FormData(this);
$.ajax({
method : "POST",
url : createPostUrl,
data : formData,
processData:false,
contentType:false,
success : function(data){
location.reload(true);
},
error : function(data){
console.log("ERROR:CH0x2 while fetching after creation form submit");
console.log("data :",data.status, data.statusText);
}
});
});
如果您想使用FormData API,请将其与HtmleElements一起使用,而不是与jQuery elementsSir一起使用,如果这不是HtmleElement它是什么?当我console.log(this)
我得到一个HTML元素否,你不会this.get(0)
是一个HTMLElement,this
正如我所写的,是一个jQuery元素try FormData(this)。也就是说。。。如果您不发送文件,则serialize()
将生成相同的表单编码数据。您的解决方案给出了此错误>类型错误:对未实现接口FormData的对象调用了“append”