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 中,我在页面上返回了这个变量。

希望对您有所帮助。