NameError: имя 'marks' не определено - PullRequest
0 голосов
/ 31 января 2020

Здесь я пытаюсь получить данные из Кассандры с помощью фильтра (), где мне нужно выбрать студентов с количеством баллов больше или равным 65, но я получаю эту ошибку, не могу понять, почему я получаю эту ошибку. Я имею в виду эту ссылку. Я также ссылался на подобные вопросы по этому вопросу, но не получил никакого решения. Вот мой python код:

from flask import *
from flask_cqlalchemy import CQLAlchemy

app = Flask(__name__)
app.config['CASSANDRA_HOSTS'] = ['127.0.0.1']
app.config['CASSANDRA_KEYSPACE'] = "emp"

db = CQLAlchemy(app)

class Student(db.Model):
    uid = db.columns.Integer(primary_key=True)
    marks = db.columns.Integer(primary_key=True)
    username = db.columns.Text(required=True)
    password = db.columns.Text()

@app.route('/merit')
    def show_merit_list():
        ob = Student.objects.filter(marks >= 65) 
        return render_template('merit.html', ml = ob)

А вот и журнал ошибок, который я получаю:

Traceback (most recent call last)
File "/home/sudarshan/.local/lib/python3.6/site-packages/flask/app.py", line 2463, in 
__call__
return self.wsgi_app(environ, start_response)
File "/home/sudarshan/.local/lib/python3.6/site-packages/flask/app.py", line 2449, in 
wsgi_app
response = self.handle_exception(e)
File "/home/sudarshan/.local/lib/python3.6/site-packages/flask/app.py", line 1866, in 
handle_exception
reraise(exc_type, exc_value, tb)
File "/home/sudarshan/.local/lib/python3.6/site-packages/flask/_compat.py", line 39, in 
reraise
raise value
File "/home/sudarshan/.local/lib/python3.6/site-packages/flask/app.py", line 2446, in 
wsgi_app
response = self.full_dispatch_request()
File "/home/sudarshan/.local/lib/python3.6/site-packages/flask/app.py", line 1951, in 
full_dispatch_request
rv = self.handle_user_exception(e)
File "/home/sudarshan/.local/lib/python3.6/site-packages/flask/app.py", line 1820, in 
handle_user_exception
reraise(exc_type, exc_value, tb)
File "/home/sudarshan/.local/lib/python3.6/site-packages/flask/_compat.py", line 39, in 
reraise
raise value
File "/home/sudarshan/.local/lib/python3.6/site-packages/flask/app.py", line 1949, in 
full_dispatch_request
rv = self.dispatch_request()
File "/home/sudarshan/.local/lib/python3.6/site-packages/flask/app.py", line 1935, in 
dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "/home/sudarshan/Downloads/PycharmProjects/try/try1.py", line 67, in show_merit_list
ob = Student.objects.filter(marks >= 65)
NameError: name 'marks' is not defined

Ответы [ 3 ]

2 голосов
/ 31 января 2020

Передайте self объект вашему методу, что позволит ему получить доступ к marks элементу данных.

Измените marks на self.marks.

    @app.route('/merit')
    def show_merit_list(self):
        ob = Student.objects.filter(self.marks >= 65) 
        return render_template('merit.html', ml = ob)
1 голос
/ 06 февраля 2020

Ну наконец-то я нашел ответ, который забыл использовать allow_filtering (). Код будет выглядеть следующим образом:

@app.route('/merit')
def show_merit_list():
    ob = Student.objects().filter() #all()
    ob = ob.filter(Student.marks >= 65).allow_filtering()
    return render_template('merit.html', ml = ob)
0 голосов
/ 31 января 2020

Вам необходимо использовать Операторы фильтрации , попробуйте:

ob = Student.objects.filter(marks__gte=65) 
...