Django - 无法从模型获取特定数据到视图
Django - Not able to get specific data from Model to the View
有点卡在通过“POST”从模型中获取特定数据到视图。只希望IP为“POST”返回视图
这是我从网页获取 post 数据的函数。它可以很好地获取数据,但我想要的只是特定行中的单个项目。它不允许我更改 html,因为我收到以下错误,我将 html 中的选项值从“ipofnode.id”
更改为“ipofnode.ip_address_field”
" 字段 'id' 需要一个数字,但得到的是 '192.168.1.1'。"
如果我将其保留为“ipofnode.id”,它会在网页上打印出整行。我只希望 IP 为“POST”返回视图,以便我可以将其保存为字符串并传递它。
1:192.168.0.216:R1-ISP:VMX
def inventory(request):
if request.method == "POST":
ipnode = Nodes.objects.get(pk=request.POST["ipofnode"])
#savedip = ipnode.ip_address_field.all()
listip.append(ipnode)
return render(request, "hwinventory/hwinventory.html",{
"allnodesips":Nodes.objects.all()})
hwinventory.html
{%extends "home/layout.html"%}
{% block body%}
<h1 style="text-align:center;">Inventory Check</h1>
<form action="{% url 'inventory' %}" method="post">
{% csrf_token %}
<select name="ipofnode">
{% for ipofnode in allnodesips %}
<option value="{{ ipofnode.id }}">{{ipofnode.hostname}}</option>
{% endfor %}
</select>
<input type="submit">
</form>
<a href="{% url 'resultsinventory' %}">View Results</a>
{%endblock%}
型号
class Nodes(models.Model):
ip_address_field = models.GenericIPAddressField()
hostname= models.CharField(max_length=30)
device_type= models.CharField(max_length=30,default='')
def __str__(self):
return f"{self.ip_address_field}:{self.hostname}:{self.device_type}"
感谢您的提问。
我更改了一些带下划线的变量名称。
html
{% block body%}
<h1 style="text-align:center;">Inventory Check</h1>
<form action="{% url 'inventory' %}" method="post">
{% csrf_token %}
<select name="ip_of_node">
{% if all_nodes_ips %}
{% for ip_of_node in all_nodes_ips %}
<option value="{{ ip_of_node.id }}">{{ip_of_node.hostname}}</option>
{% endfor %}
{% else %}
<p>We haven't 'all_nodes_ips'</p>
{% endif %}
</select>
<input type="submit">
</form>
{% if ip_of_node %}
<p>{{ ip_of_node.ip_address_field }}</p>
{% else %}
<p>We haven't 'ip_of_node'</p>
{% endif %}
<a href="{% url 'results_inventory' %}">View Results</a>
{% endblock %}
views.py
def inventory(request):
all_nodes_ips = Nodes.objects.all()
if request.method == "POST":
ip_of_node = request.POST["ip_of_node"]
data = Nodes.objects.filter(id=ip_of_node)
context = {
"ip_of_node": ip_of_node[0],
}
return render(request, "hw_inventory/hw_inventory.html", context)
return render(request, "hw_inventory/hw_inventory.html", {"all_nodes_ips": all_nodes_ips})
如果您需要使用新变量:这取决于您需要在何处以及如何使用它。
可能您应该添加 forms.py 并使用 .save() 方法将其保存在数据库中。
在上面的 html 中,我在页面上返回了这个变量。
希望对您有所帮助。
有点卡在通过“POST”从模型中获取特定数据到视图。只希望IP为“POST”返回视图
这是我从网页获取 post 数据的函数。它可以很好地获取数据,但我想要的只是特定行中的单个项目。它不允许我更改 html,因为我收到以下错误,我将 html 中的选项值从“ipofnode.id”
更改为“ipofnode.ip_address_field”" 字段 'id' 需要一个数字,但得到的是 '192.168.1.1'。"
如果我将其保留为“ipofnode.id”,它会在网页上打印出整行。我只希望 IP 为“POST”返回视图,以便我可以将其保存为字符串并传递它。
1:192.168.0.216:R1-ISP:VMX
def inventory(request):
if request.method == "POST":
ipnode = Nodes.objects.get(pk=request.POST["ipofnode"])
#savedip = ipnode.ip_address_field.all()
listip.append(ipnode)
return render(request, "hwinventory/hwinventory.html",{
"allnodesips":Nodes.objects.all()})
hwinventory.html
{%extends "home/layout.html"%}
{% block body%}
<h1 style="text-align:center;">Inventory Check</h1>
<form action="{% url 'inventory' %}" method="post">
{% csrf_token %}
<select name="ipofnode">
{% for ipofnode in allnodesips %}
<option value="{{ ipofnode.id }}">{{ipofnode.hostname}}</option>
{% endfor %}
</select>
<input type="submit">
</form>
<a href="{% url 'resultsinventory' %}">View Results</a>
{%endblock%}
型号
class Nodes(models.Model):
ip_address_field = models.GenericIPAddressField()
hostname= models.CharField(max_length=30)
device_type= models.CharField(max_length=30,default='')
def __str__(self):
return f"{self.ip_address_field}:{self.hostname}:{self.device_type}"
感谢您的提问。
我更改了一些带下划线的变量名称。
html
{% block body%}
<h1 style="text-align:center;">Inventory Check</h1>
<form action="{% url 'inventory' %}" method="post">
{% csrf_token %}
<select name="ip_of_node">
{% if all_nodes_ips %}
{% for ip_of_node in all_nodes_ips %}
<option value="{{ ip_of_node.id }}">{{ip_of_node.hostname}}</option>
{% endfor %}
{% else %}
<p>We haven't 'all_nodes_ips'</p>
{% endif %}
</select>
<input type="submit">
</form>
{% if ip_of_node %}
<p>{{ ip_of_node.ip_address_field }}</p>
{% else %}
<p>We haven't 'ip_of_node'</p>
{% endif %}
<a href="{% url 'results_inventory' %}">View Results</a>
{% endblock %}
views.py
def inventory(request):
all_nodes_ips = Nodes.objects.all()
if request.method == "POST":
ip_of_node = request.POST["ip_of_node"]
data = Nodes.objects.filter(id=ip_of_node)
context = {
"ip_of_node": ip_of_node[0],
}
return render(request, "hw_inventory/hw_inventory.html", context)
return render(request, "hw_inventory/hw_inventory.html", {"all_nodes_ips": all_nodes_ips})
如果您需要使用新变量:这取决于您需要在何处以及如何使用它。 可能您应该添加 forms.py 并使用 .save() 方法将其保存在数据库中。 在上面的 html 中,我在页面上返回了这个变量。
希望对您有所帮助。