flask-mongoengine AttributeError: у объекта 'BaseQuerySet' нет атрибута 'имя_службы' - PullRequest
0 голосов
/ 12 июня 2018

Мой код:

models.py

from flask_mongoengine import MongoEngine, QuerySet
import datetime

db = MongoEngine()

class Service(db.Document):
    service_name = db.StringField(max_length=50, required=True)
    date_created = db.DateTimeField(default=datetime.datetime.utcnow)
    meta = {
        'ordering': ['-date_created'], 'strict' : False
    }

class Organisation(db.Document):
    org_name = db.StringField(max_length=50, required = True)
    service = db.ReferenceField(Service, reverse_delete_rule='CASCADE', required=True)
    date_created = db.DateTimeField(default=datetime.datetime.utcnow)
    meta = {
        'ordering': ['-date_created'], 'strict' : False
    }

API (rout.py)

@service.route('/services/<name>', methods=['GET'])

def get_one_service(name):
    s = Service.objects(service_name=name)  
    if s:
        output = {'service_name' : s.service_name}
    else:
        output = "No such name"
    return jsonify({'result' : output})

Метод get_one_service() возвращает вышеупомянутую ошибку.Согласно документации, это правильно.

1 Ответ

0 голосов
/ 13 июня 2018

В вашей функции get_one_service s - это не экземпляр Service, а набор запросов ( этот пример из документации может сделать его более понятным)

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

try
    s = Service.objects.get(service_name=name) 
    output = {'service_name' : s.service_name}
except Service.DoesNotExist:
    output = 'no such name'

Хотя поле service_name не уникально в вашей модели, вы можете получить исключение MultipleObjectsReturned, если есть два документа с одинаковымservice_name.

Кроме того, вы можете посмотреть, содержит ли s несколько Service с и действовать соответственно.

...