首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AttributeError:'InstrumentedList‘

AttributeError:'InstrumentedList‘
EN

Stack Overflow用户
提问于 2015-09-24 14:58:26
回答 2查看 1.9K关注 0票数 0

我对使用SQLALCHEMYPYRAMID web框架都很陌生。对于一些人来说,我正在努力解决一个简单的问题,但我还没有弄清楚。我看过一些posts here on Stacks,但他们没有完全回答我的问题。

我的many-to-many表中有一个database关系。我正在尝试从父表return (categories)中提取一个对象(categories)。我现在正在尝试:return {'name': assessment.name, 'text': assessment.text, 'user': assessment.user_id, 'video':assessment.video_id, 'categories': assessment.categories.assessment_category_link},但这不起作用--> 'categories': assessment.categories.assessment_category_link

我能够返回除类别以外的所有对象。下面是相关的错误和代码。

回溯:

代码语言:javascript
复制
 line 306, in get_assessment
    return {'name': assessment.name, 'text': assessment.text, 'user': assessment.user_id, 'video':assessment.video_id, 'categories': assessment.categories.assessment_category_link}
AttributeError: 'InstrumentedList' object has no attribute 'assessment_category_link'

SQLALCHEMY表/关系:

代码语言:javascript
复制
# MANY-to-MANY
association_table = Table('assessment_category_link', Base.metadata,
    Column('assessment_id', Integer, ForeignKey('assessments.assessment_id')),
    Column('category_id', Integer, ForeignKey('categories.category_id')))

class Assessment(Base):
    # column/entity code
    categories = relationship('Category', secondary='assessment_category_link', backref='assessments')

    def __init__(self, name, text, user, video, categories):
        # CODE 
        self.categories = categories

GET()方法,特别是抛出错误的return值:

代码语言:javascript
复制
@view_config(route_name='assessment', request_method='GET', renderer='json')
def get_assessment(request):
    with transaction.manager:
        assessment_id = int(request.matchdict['id'])
        assessment = api.retrieve_assessment(assessment_id)
        if not assessment:
            raise HTTPNotFound()
        return {'name': assessment.name, 'text': assessment.text, 'user': assessment.user_id, 'video':assessment.video_id, 'categories': assessment.categories.assessment_category_link}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-09-24 15:44:54

我不确定您想要实现什么,因为assessment.categories将返回需要迭代的Category对象列表。这样的列表没有一个名为assessment_category_link的属性是合乎逻辑的(正如异常告诉您的那样),而且我不清楚为什么要访问关联对象!

secondary关键字参数的关系是,目的是将这种复杂性隐藏起来,这样assessment.categories就可以透明地返回您想要的列表。

您可以根据需要表示类别列表,这是对您的情况的建议:

代码语言:javascript
复制
{...., 'categories': ', '.join([str(i) for i in assessment.categories])}
票数 2
EN

Stack Overflow用户

发布于 2015-09-29 19:08:35

上面的答案非常接近,但工作的code是:

代码语言:javascript
复制
{...., 'categories': ','.join([str(i) for i in assessment.categories])}

相同问题的类似堆栈问题/答案:TypeError: sequence item 0: expected string, int found

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32764646

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档