【发布时间】:2020-07-14 19:56:35
【问题描述】:
我确实问过这个问题,但我会再问一次,因为没有得到任何回应
我正在开发一个带有项目和工单表的简单烧瓶应用程序,它们如下所示
class Projects(db.Model):
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(100), nullable = False)
description = db.Column(db.Text, nullable = False)
created_by_id = db.Column(db.Integer, nullable = False)
expert_id = db.Column(db.Integer, db.ForeignKey('users.id'))
def __repr__(self):
return f"{self.title}"
class Tickets(db.Model):
id = db.Column(db.Integer,primary_key=True)
title = db.Column(db.String(100),nullable=False)
ticket_text = db.Column(db.Text,nullable=False)
date_posted = db.Column(db.DateTime,nullable=False,default=datetime.utcnow)
created_by_id = db.Column(db.Integer, nullable=False)
expert_id = db.Column(db.Integer, db.ForeignKey('users.id'),nullable=False)
project_id = db.Column(db.Integer, db.ForeignKey('projects.id'),nullable=False)
projects = db.relationship('Projects', backref='ticketso', lazy=True)
def __repr__(self):
return f"Tickets('{self.title}','{self.date_posted}')"
基本上它是一个项目可以有很多票,但是当我查询它时
@app.route('/project/<project_id>')
def project(project_id):
project = Projects.query.get_or_404(project_id)
return render_template('project.html',title=project.title, project=project)
并试图显示它
<div class="jumbotron">
<h1>{{ project.title }}</h1>
<p>{{ project.description }}</p>
<p><a class="btn btn-primary btn-md">{{ project.created_by_id }}</a></p>
<p><a class="btn btn-primary btn-lg">{{ project.ticketso }}</a></p>
</div>
这里 project.ticketso 应该返回分配给该项目的票证列表,但它返回的是 emtpy 列表
我的tickets.html 页面可以成功显示分配给该特定票证的Project_id
这就是我将ticket 添加到项目中的方式
@app.route('/createTicket',methods=['GET','POST'])
def createTicket():
users = Users.query.all()
form = TicketForm()
if form.validate_on_submit():
ticket = Tickets(title=form.title.data,ticket_text=form.ticket_text.data,created_by_id=current_user.username,expert_id= str(form.user_id.data),project_id= str(form.project.data))
db.session.add(ticket)
db.session.commit()
flash('Your ticket has been created', 'success')
return redirect(url_for('index'))
return render_template('createTicket.html',title='Create a Ticket',form=form, users=users)
@app.route('/createProject',methods=['GET','POST'])
def createProject():
users = Users.query.all()
form = ProjectForm()
if form.validate_on_submit():
project = Projects(title = form.title.data, description = form.description.data, created_by_id = current_user.username, expert_id = str(form.user_id.data))
db.session.add(project)
db.session.commit()
flash('You project has been created', 'success')
return redirect(url_for('index'))
return render_template('createProject.html',form = form, users = users)
编辑: 为了清楚起见,我会以不同的方式问这个问题。
class Person(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(50), nullable=False)
addresses = db.relationship('Address', backref='person', lazy=True)
class Address(db.Model):
id = db.Column(db.Integer, primary_key=True)
email = db.Column(db.String(120), nullable=False)
person_id = db.Column(db.Integer, db.ForeignKey('person.id'),
nullable=False)
上面的代码是我从flask文档https://flask-sqlalchemy.palletsprojects.com/en/2.x/models/得到的
说明
backref is a simple way to also declare a new property on the Address class. You can then also use my_address.person to get to the person at that address
所以我可以访问person 中的address,但是我们如何访问person 拥有的addresses 列表。因为是one to many relationship,所以one person可以有很多addresses对吗?我们如何访问它们?
【问题讨论】:
-
我很困惑...你想做什么?您要查找哪一列?您正在尝试通过
Projects查找用户的Tickets? -
你能告诉我们你是如何向表格中添加新对象的吗?
-
@Patch 我正在尝试查找分配给该项目的工单列表
-
@Patch,谢谢我已经更新了问题,请检查一下
-
好的,你在哪里添加项目?
标签: python-3.x flask flask-sqlalchemy