AttributeError at type object 'Services' has no attribute 'app'

Я недавно начал разрабатывать Django. Я хочу связать мой алгоритм на python и Django web ui, поэтому я попытался связать их оба в views.py, но столкнулся с проблемой.

Пишет AttributeError at type object 'Services' has no attribute 'app' но я объявил его в queryOnMetadataModel.init. Я не знаю, что не так. Кто-нибудь может мне помочь?

Вот мои фрагменты кода;

  • queryOnMetadataModel.py
from Neo4jConnection import App   
import json  class Services:`

    def __init__(self):
        uri = "neo4j+s://a50f760a.databases.neo4j.io:7687"
        user = "neo4j"
        password = "password"
        self.app = App(uri, user, password)
    
    def find_node_type(self,nodeName):
        node_type = self.app.find_node_type(nodeName)
        self.app.close()
        return node_type
  • views.py
from django.shortcuts import render
from BitirmeTeziSourceCode.queryOnMetadataModel import Services

import sys
sys.path.append(".")

# Create your views here.

def home(request):

    data = Services.find_node_type(Services , 'Region')
    
    nodes = {
        "nodes" : data
    }
    
    return render(request , "index.html" , nodes)

urls.py


from django.urls import path
from . import views

urlpatterns = [
    path("" , views.home)
]

Изображение ошибки

Я хочу получить доступ к выводу Services.find_node_type(Services , 'Region') из index.html

Сообщение об ошибке "Attribute 'app' of 'Services' objects is not writable," возникает потому, что вы пытаетесь установить значение атрибута класса 'Services', а не экземпляра этого класса. В строке data = Services.find_node_type(Services , 'Region') вы вызываете метод find_node_type класса 'Services' вместо экземпляра этого класса.

Чтобы исправить это, сначала создайте экземпляр класса 'Services', а затем вызовите метод find_node_type на этом экземпляре. Это можно сделать, создав переменную services = Services() перед вызовом метода, а затем вызвав data = services.find_node_type('Region').

Вот обновленный код views.py:

from django.shortcuts import render
from BitirmeTeziSourceCode.queryOnMetadataModel import Services

import sys
sys.path.append(".")

def home(request):
    services = Services()
    data = services.find_node_type('Region')
    
    nodes = {
        "nodes" : data
    }
    
    return render(request , "index.html" , nodes)

Кроме того, вы можете добавить некоторую обработку ошибок в вашу функцию, если вы хотите обрабатывать любые исключения, которые могут возникнуть во время выполнения функции.

Вам нужно сначала создать экземпляр, а не использовать класс напрямую, поэтому:

def home(request):
    instance=Services()
    data = instance.find_node_type('Region')
    
    nodes = {
        "nodes" : data
    }
    
    return render(request , "index.html" , nodes)

Примечание: Также лучше писать классы в единственном числе, поэтому лучше писать Service, а не Services.

Вернуться на верх