Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python django使用Modelform保存数据_Python_Ajax_Django - Fatal编程技术网

Python django使用Modelform保存数据

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

我使用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();
            }
        }
    });

您需要从
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()