Python django使用Modelform保存数据
我使用AJAX将数据保存到数据库中,我有一个问题。留言板将发送3个变量,由用户输入:姓名、电子邮件和消息。它没有发送IP,但我必须将其保存到数据库中。如何编辑Python django使用Modelform保存数据,python,ajax,django,Python,Ajax,Django,我使用AJAX将数据保存到数据库中,我有一个问题。留言板将发送3个变量,由用户输入:姓名、电子邮件和消息。它没有发送IP,但我必须将其保存到数据库中。如何编辑views.py以获取IP?请引导我 多谢各位 forms.py class MessageForm(ModelForm): class Meta: model = Message fields = ['name', 'email', 'message','ip'] views.py def cre
views.py
以获取IP?请引导我
多谢各位
forms.py
class MessageForm(ModelForm):
class Meta:
model = Message
fields = ['name', 'email', 'message','ip']
views.py
def create_post(request):
if request.method == 'POST':
form = MessageForm(request.POST)
if form.is_valid():
# ip = request.META['REMOTE_ADDR'] #not work
m = form.save()
return HttpResponse(2)
else:
form = MessageForm()
这是我的ajax部分:
我没有在这里发送ip
$.ajax({
url: '{% url 'core:create_post' %}',
data: {
"name":name,
"email":email,
"message":message,
},
type: 'POST',
async: false,
dataType: 'json',
error: function(ts){
alert('操作失敗');
window.location.reload();
},
success: function(dataArr){
if(dataArr == 2){
alert('Sudccess!');
window.location.reload();
}else{
alert('something wrong!');
window.location.reload();
}
}
});
您需要从
ModelForm
中删除ip
字段。否则form.is\u valid()
将返回False
,因为ip
字段不是用户输入的
接下来,您必须使用commit=False
保存ModelForm
。这不会将数据存储在数据库中,而是返回一个Model
对象。然后可以设置该模型对象的ip
属性并保存该模型对象。您的代码如下所示:
if form.is_valid():
ip = request.META['REMOTE_ADDR'] #get the ip address
m = form.save(false)
m.ip = ip #set the ip address here
m.save() # now saved to database
模型表单的优点在于它始终具有一个
实例
属性,该属性保存实际的模型实例,即使它在数据库中还不存在。Rafiqunnabi的代码可以缩短为:
if form.is_valid():
form.instance.ip = request.META['REMOTE_ADDR']
m = form.save()
谢谢分享:)
if form.is_valid():
form.instance.ip = request.META['REMOTE_ADDR']
m = form.save()