Django ← Cómo vincular datos dinámicos a otros datos dinámicos

Estoy trabajando en un proyecto de inventario IP y tengo la configuración del modelo de base de datos junto con el trabajo de búsqueda. He creado otro modelo e importado mis datos de vulnerabilidad de Nessus.

Estoy tratando de conectar la dirección IP desde mi resultado de búsqueda de inventario a la otra vista para mostrar la información del otro modelo, pero no puedo conseguir el filtro derecho. Tengo todos los registros o ninguno cuando hago clic en el enlace. Cualquier dirección sería apreciada!

Aquí está la función:

def nessusDATA(request):
items = NessusReports.objects.filter(Host=IPs.IP_Address)
context = {
    'items': items,
           }
return render(request, 'nessusdata.html', context)

Aquí está el enlace:

{{item.IP_Address}}

Aquí está el Modelo:

class NessusReports(models.Model):
Risk = models.CharField(max_length=100, blank=True)
Host = models.CharField(max_length=100, blank=True)

Aquí está el URP. py

path('nessusDATA/str:Host', views.nessusDATA, name='Host'),

Pregunta hecha hace 3 años, 5 meses, 0 días - Por techwizkid


3 Respuestas:

  • Urls. py

    path('nessusDATA/', views.nessusDATA, name='nessusDATA'),
    

    vistas. py

    def nessusDATA(request,Host):
        items = NessusReports.objects.filter(Host=Host)
        context = {
            'items': items,
                   }
        return render(request, 'nessusdata.html', context)
    

    enlace:

    {{item.Host}}
    

    dar más detalles sobre su proyecto si esto no funciona.

    Respondida el Dec 17, 2020 a las 00:14 - por syntaxsensei8acf

    Votos positivos: 0 | Votos negativos: 0

  • El problema que estás enfrentando parece estar en cómo estás pasando la dirección IP desde tus resultados de búsqueda de inventario a la otra vista para mostrar la información del modelo NessusReports. En tu función nessusDATA, estás tratando de filtrar los datos de NessusReports usando IPs.IP_Address como filtro, pero no estás obteniendo los resultados deseados.

    Una posible solución a este problema sería pasar la dirección IP como parámetro en la URL y luego usar ese parámetro para filtrar los datos en tu vista nessusDATA. Aquí te muestro cómo hacerlo:

    Primero, actualiza tu URLconf en urls.py para capturar el parámetro de la dirección IP:

    python
    path('nessusDATA//', views.nessusDATA, name='nessusDATA'),
    

    Luego, en tu template donde tienes el enlace para mostrar la dirección IP y redirigir a la vista nessusDATA, asegúrate de pasar la dirección IP como parte de la URL:

    html
    {{ item.IP_Address }}
    

    Finalmente, en tu vista nessusDATA, recibe el parámetro de la dirección IP y úsalo para filtrar los datos de NessusReports:

    python
    def nessusDATA(request, ip_address):
        items = NessusReports.objects.filter(Host=ip_address)
        context = {
            'items': items,
        }
        return render(request, 'nessusdata.html', context)
    

    Con este enfoque, deberías poder vincular los datos dinámicos de la dirección IP desde tu vista de inventario a la vista para mostrar la información del modelo NessusReports de manera correcta. ¡Espero que esta solución te ayude a resolver tu problema!

    Respondida el Dec 18, 2020 a las 00:15 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • El problema en tu código es que estás intentando filtrar el modelo NessusReports usando un campo que no existe en el modelo: IPs.IP_Address.

    Tu código actual:

    python
    items = NessusReports.objects.filter(Host=IPs.IP_Address)
    

    No funcionará porque el modelo NessusReports no tiene un campo llamado IPs.

    Para filtrar correctamente el modelo NessusReports por la dirección IP, necesitas usar el campo Host del modelo NessusReports. Tu código actualizado debería verse así:

    python
    items = NessusReports.objects.filter(Host=item.IP_Address)
    

    Donde item es el objeto IPs que estás obteniendo de la vista de búsqueda de inventario.

    Además, la URL en tu urls.py parece estar mal definida. Debería ser así:

    python
    path('nessusDATA//', views.nessusDATA, name='Host'),
    

    Espero que esto resuelva tu problema. Déjame saber si tienes alguna otra pregunta.

    Respondida el Dec 18, 2020 a las 00:20 - por Gemini

    Votos positivos: 0 | Votos negativos: 0