我使用AJAX将数据保存到数据库中,我有一个问题。留言板将发送3个变量,由用户输入:名称,电子邮件和消息。它没有发送IP,但我必须将其保存到数据库中。如何编辑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();
}
}
});
答案 0 :(得分:0)
def create_post(request):
if request.method == 'POST':
form = MessageForm(request.POST)
form.ip = request.META['REMOTE_ADDR'] # added 'ip' to the form object here
if form.is_valid():
m = form.save()
return HttpResponse(2)
else:
form = MessageForm()
答案 1 :(得分:0)
您需要从ip
中删除ModelForm
字段。否则form.is_valid()
将返回False
,因为ip
字段不是来自用户输入。
接下来,您必须使用ModelForm
保存commit=False
。这不会将数据存储在数据库中,而是返回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
答案 2 :(得分:0)
模型表单的优点是始终具有instance
属性,该属性包含实际的模型实例,即使它在数据库中尚不存在。 Rafiqunnabi的代码可以简化为:
if form.is_valid():
form.instance.ip = request.META['REMOTE_ADDR']
m = form.save()