首页 > 解决方案 > 数据显示问题——flask、python sqlalchemy

问题描述

大家好,我有小问题,有两个模型 Person 和 Pet,我有两个人和 4 个宠物

我要显示的内容:

  1. 人和宠物的名字
  2. 在同一个视图中,在新视图中舔一个人的名字和一个宠物的列表之后,添加一个带有人 ID 的 href 我有什么 模型:
class Person(db.Model):

    id = db.Column(db.Integer,primary_key = True)
    name = db.Column(db.Text)
    pets = db.relationship('Pet', backref='owner', lazy='joined')

    def __init__(self,name):
        self.name = name

 class Pet(db.Model):

    id = db.Column(db.Integer,primary_key= True)
    name = db.Column(db.Text)
    owner_id = db.Column(db.Integer,db.ForeignKey('person.id'))

    def __init__(self,name,owner_id):
        self.name = name
        self.owner_id = owner_id

我目前的看法

def list_item():
    # Grab a list of puppies from database.
    persons = Person.query.all()
    return render_template('list.html', persons=persons)

到目前为止我有什么HTML:( list.html )

{% for person in persons %}
<li>{{ person.name }} - {{ person.pets }}</li>
{% endfor %}

输出:

   • Person1 - [<Pet 3>, <Pet 4>, <Pet 1>]
   • Person2 - [<Pet 2>]

我想对宠物打电话给人的名字等艺术作品进行处理。

谢谢!

标签: pythonflasksqlalchemy

解决方案


在您的 html 模板中是person.pets一个Pet对象列表。您可以使用附加for循环对它们进行迭代以获取Pet对象,然后获取它们的属性:

{% for person in persons %}
<li>
    {{ person.name }} has the following pets:
    <ul>
        {% for pet in person.pets %}
        <li> {{ pet.name }} </li>
        {% endfor %}
    </ul>
</li>
{% endfor %}

推荐阅读