Я задал этот вопрос, но собираюсь задать его еще раз, так как не получил ответа
Я разрабатываю простое приложение flask с таблицами проектов и заявок, и они выглядят следующим образом:
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
должен вернуть список билетов, назначенных этому проекту, но вместо этого он возвращает список пустых
Моя 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
, но как нам получить доступ к списку addresses
имеет person
. Поскольку это one to many relationship
, это означает, что one person
может иметь много addresses
правильно? как получить к ним доступ?