首页 > 解决方案 > Django视图不从表单传递IP地址数据

问题描述

在这里尝试做一些简单的事情,将 IP 地址从表单传递到另一个视图。以前,我按照初学者教程取得了成功。如果有人能指出我所缺少的东西,那将是一个巨大的帮助。

模型:

class GenericIP(models.Model):
    name = models.CharField(max_length=50)
    genericip = models.GenericIPAddressField()

    def __str__(self):
        return self.name 

形式:

class IpForm(forms.Form):
    gateway = ModelChoiceField(queryset=GenericIP.objects.order_by('name').values_list('genericip', flat=True).distinct())

意见:

def TestCreate(request):
    if request.method == 'GET':
        form1 = IpForm()
        return render(request, 'create_test.html', {'form1' : form1} )
    else:
        if request.method == 'POST':
            form1 = IpForm()
            if form1.is_valid():
                genericip = form1.cleaned_data
                genericip.save()
            return render(request, 'create_test.html', {'genericip' : genericip} )

def RunTest(request, genericip=""):
    if request.method == 'POST':
        Server = genericip
    return HttpResponse(Server)

网址:

urlpatterns = [
    path('', views.TestCreate, name='create_test'),
    path('run_test', views.RunTest, name='run_test',),
    ]

模板:

{% block content %}
<form action="{% url 'run_test' %}"method='post'>
    {% csrf_token %}
    {{ form1 }}
    <input type='submit' class="btn btn-success" value='Run Test'>
</form>
{% endblock %}

所以发生的事情是当我点击按钮运行测试时,我没有得到任何 httpresponse 的东西。TestCreate 视图的发布数据确实显示变量“genericip”并输入“192.168.100.100”,但该数据未正确发布到运行测试视图。

标签: pythondjango

解决方案


RunTest函数中,您将 genericip 值作为函数参数获取。但在您的场景中,您以 submit 表单的形式发送 genericip 值。所以你应该尝试这样的事情,

def RunTest(request):
    if request.method == 'POST':
        ip = request.POST.get('gateway') # Some thing with form field name
        Server = ip
    return HttpResponse(Server)

希望这对你有帮助,如果有什么请告诉我。


推荐阅读