我使用SQLAlchemy创建了这些表:
class User(db.Model):
__tablename__ = 'users'
id = db.Column(db.Integer, primary_key=True)
## user info
name = db.Column(db.String)
email = db.Column(db.String)
password = db.Column(db.String)
category = db.Column(db.Enum('admin', 'employee', 'client', name='user_category'),\
default='client')
role = db.Column(db.String)
def check_password(self, password):
return check_password_hash(self.password, password)
def set_password(self, password):
self.password = generate_password_hash(password)
def is_authenticated(self):
return True
def is_active(self):
return True
def is_anonymous(self):
return False
def get_id(self):
try:
return unicode(self.id) # python 2
except NameError:
return str(self.id) # python 3
def get_category(self):
return self.category
def __repr__(self):
return '<User %r>' % self.name
class Ticket(db.Model):
__tablename__ = 'tickets'
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String)
description = db.Column(db.Text)
priority = db.Column(db.Enum('high', 'normal', \
'low', name='ticket_priority'), default='normal')
status = db.Column(db.Enum('open', 'closed', \
'on hold', name='ticket_status'), default='open')
start_time = db.Column(db.DateTime)
end_time = db.Column(db.DateTime)
worked_hours = db.Column(db.Interval,
default=datetime.timedelta(days=0, hours=0, minutes=0, seconds=0))
play_time = db.Column(db.DateTime)
pause_time = db.Column(db.DateTime)
client = db.Column(db.Integer, db.ForeignKey('users.id'))
employee = db.Column(db.Integer, db.ForeignKey('users.id'))
def __repr__(self):
return '<Ticket %r>' % self.title
在我的模板中,我有这个HTML:
<thead>
<tr>
<th>{{ _('Client') }}</th>
<th>{{ _('Employee') }}</th>
<th>{{ _('Start Time') }}</th>
<th>{{ _('End Time') }}</th>
</tr>
</thead>
<tbody>
<tr>
<td>{{ ticket.client.name }}</td>
<td>{{ ticket.employee.name }}</td>
<td>{{ ticket.start_time }}</td>
<td>{{ ticket.end_time }}</td>
</tr>
</tbody>
但是当我打开此页面时,既不会显示客户名称或员工姓名。尝试打印 ticket.client.name 时,会返回以下错误:
AttributeError: 'int' object has no attribute 'name'
为什么会发生这种情况?如何以正确的方式访问客户信息?
答案 0 :(得分:0)
目前,Ticket.client
是整数外键列。所以ticket.client
是一个int,而int没有name
属性。而是重命名列client_id
,并为客户端创建relationship
。由于用户有多个外键,因此需要告诉使用哪个外键。
class Ticket(db.Model):
...
client_id = db.Column(db.Integer, db.ForeignKey(User.id))
...
client = db.relationship(Client, foreign_keys=client_id)