2015-09-24 6 views
0

Я пытаюсь отобразить хороший ol JSON через return {'category_name': category.category_name} в файле views.py. Я использую Pyramid Web Framework. Я использую пользовательский RESTful web api и CRUD-проект в базе данных SQLALCHEMY.Редактирование объекта List: AttributeError: объект «list» не имеет атрибута «...»

По какой-то причине, я постоянно получаю Traceback error:

views/views.py", line 112, in get_category 
    return {'category': category.category_name} 
AttributeError: 'list' object has no attribute 'category_name' 

Все, что я хочу сделать, это напечатать к HTML или сделать его HTML, чтобы я мог видеть то, что было создано. В категории есть атрибут category_name ..., который запутан. Возможно, чтобы вернуть значение списка, я должен использовать специальный синтаксис? Я не мог найти что-либо в Интернете, что имело смысл для меня (это был most relevant), но любое руководство будет принята с благодарностью! Я уверен, что это что-то простое.

Получ: сайт объекта возврата (означало для визуализации на Jinja2 шаблоны позже):

@view_config(route_name='category', request_method='GET', renderer='json') 
def get_category(request): 
    with transaction.manager: 
     category_id = int(request.matchdict['id']) 
     category = api.retrieve_category(category_id) 
     if category is None: 
      raise HTTPNotFound() 
     return {'category_name': category.category_name} 

Это то, что метод POST выглядит (очень похожа на функцию Create в API DB):

@view_config(route_name='categories', request_method='POST', renderer='json') 
def post_category(request): 
    with transaction.manager: 
     category_name = request.params['category_name'] 
     category = api.create_category(category_name) 
     return HTTPCreated(location=request.route_url('category',id=id)) 

DB API для создания категории (это имеет многие-ко-многим с оценкой, таким образом список):

def create_category(self, category_name): 
    new_category = Category(category_name) 
    self.session.add(new_category) 
    print(new_category) 
    self.session.commit() 

Получить метод:

def retrieve_category(self, something_unique): 
    if isinstance(something_unique, int): 
     return self.session.query(Category).\ 
     filter(Category.category_id == something_unique).all() # multiple categories 
    elif isinstance(something_unique, basestring): 
     print(something_unique) # added 
     return self.session.query(Category).\ 
     filter(Category.category_name == something_unique).one() 
     print(something_unique) 
     if NoResultFound: 
      raise NotFoundError('No results found') 
     elif MultipleResultsFound: 
      raise MultipleResultsFound('Too many results found') 
    elif isinstance(something_unique, Category): 
     return something_unique 
    else: 
     raise ValueError('Value being passed is an object') 

удобства апи (наследование):

def create_assessment(self, name, text, username, videoname, category_names): 
    user = self.retrieve_user(username) 
    video = self.retrieve_video(videoname) 
    cat_objects = [self.retrieve_category(category_name) for category_name in category_names] 
    return super(ConvenienceAPI, self).create_assessment(name, text, user, video, cat_objects) 
+0

Ошибка явно говорит о том, что «категория» - это список. Отправьте код, создающий 'category'. – Javier

+0

Код категории POST (create) указан выше. Теперь я добавлю API для базы данных. – thesayhey

+0

Пожалуйста, добавьте код 'api.retrieve_category'. – Javier

ответ

2

api.retrieve_category() возвращает список, как показывает исключения. Что вы ожидаете от возвращения?

Вам нужно проверить, что возвращает ваш API. Возможно, вы могли бы получить доступ первый элемент в возвращаемом списке, так что это может работать:

return {'category_name': category[0].category_name} 

Однако, если API фактически возвращая пустой список ([]) не означает никакого результата, то вам нужно проверить, что вместо чем для None:

if not category: 
    raise HTTPNotFound() 
+0

он работает! Спасибо. Я знал, что это проблема, я просто не знал правильного синтаксиса для печати списка в возвращаемом значении JSON. Я совершенно новый! – thesayhey

+0

Совет по использованию 'not' на месте' None' очень полезен! Спасибо. – thesayhey

Смежные вопросы