django使用Modelform来保存数据

时间:2014-11-26 05:37:02

标签: 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 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();
            }
        }
    });

3 个答案:

答案 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()