Найти - Пользователи
Полная версия: Flask, SQLAlchemy, 2 таблицы. Что не так?
Начало » Базы данных » Flask, SQLAlchemy, 2 таблицы. Что не так?
1
boligolov
Не получается связать status_id с serials_id.
Выдает “ SELECT status.id AS status_id, status.status_name AS status_status_name, status.serial_id AS status_serial_id FROM status WHERE :param_1 = status.serial_id”

class Serials(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    serial = db.Column(db.String(30))
    packet_id = db.Column(db.String(39))
    date_cr = db.Column(db.String(22)) # Packet create
    date_pk= db.Column(db.String(22)) # Packet packing
    date_sd = db.Column(db.String(22)) # Packet start dru
    date_fd= db.Column(db.String(22)) # Packet finish dry
    status_id = db.relationship("Status", backref ="sernick", lazy = 'dynamic')
    dry_id = db.Column(db.String(30))
    def __init__(self, serial):
        self.serial = serial
    def __repr__(self):
        return "<Serials(serial='%s'>" % (self.serial)
class Status(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    status_name = db.Column(db.String(20))
    serial_id = db.Column(db.Integer, db.ForeignKey('serials.id'))
    def __init__(self, status_name):
        self.status_name = status_name
    def __repr__(self):
return “<Status %r>” % (self.status_name)
sander
boligolov
'dynamic' возвращает обьект Query, а к нему уже применяется all, filter, и тд., или можно использовать получение елемента списка по индексу , что тоже выполнит запрос
boligolov
А не подскажите, во вьюхе я получаю поле из Serials - id, ser и starus_id, которое соответствует полю id в Status. Могу ли через query получить id, serials и Status.name соответствующую starus_id?

models.py
class Serials(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    ser = db.Column(db.String(30))
    starus_id = db.Column(db.Integer, db.ForeignKey("status.id"))
    
    def __repr__(self):
        return '<Serials %r>' % (self.ser)
class Status(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(10))
    ser_id = db.relationship("Serials", backref = 'status')
    def __repr__(self):
        return '<Status %r>' % (self.name)
view.py
class ItemTable(Table):
    id = Col('Id')
    ser = Col('Серийный номер')
    starus_id = Col ("Статус пакета")
items = Serials.query.all()
table1 = ItemTable(items)
z = items[1].status.name
table1 = 
@app.route("/table2")
def table2():
    return render_template ("table.html", table = table1)
4kpt_III
Что это вообще такое?

class ItemTable(Table):
    id = Col('Id')
    ser = Col('Серийный номер')
    starus_id = Col ("Статус пакета")
boligolov
4kpt_III
Что это вообще такое?
Это от библиотеки flask-table.

from flask_table import Table, Col
class ItemTable(Table):
    id = Col('Id')
    ser = Col('Серийный номер')
    starus_id = Col ("Статус пакета")
items = Serials.query.all()
table1 = ItemTable(items)
sander
boligolov
а почему это за пределами вьюхи?
items = Serials.query.all()
table1 = ItemTable(items)
и кажется Вам нужно это
boligolov
sander
boligolovа почему это за пределами вьюхи?
не весь views.py отправил, так он там находится.
sander
boligolov
за пределами
@app.route("/table2")
def table2():
    .....
4kpt_III
boligolov
Это от библиотеки flask-table.
Это уже даже не смешно.
boligolov
Подучил матчасть и пошло как надо:

view.py
@app.route("/")
@app.route('/index')
def index():
    l = ["1", "2", "3"]
    q = Serials.query.order_by(Serials.id).all()
    return render_template('temp1.html', title = "Учет пиломатериалов", menu = l, serials =q)

temp1.html
{% extends "base.html" %}
{% block title %}{{title}}{% endblock title %}
{% block head %}
    {{ super() }}
    <style type="text/css">
        .important { color: #336699; }
    </style>
{% endblock %}
{% block content %}
    <h1>Меню</h1>
    <p class="important">Учет пиломатериалов</p>
      <ul>
        {% for i in menu %}
        <li>{{i}}</li>
        {% endfor %}
      </ul>
<div id="main" class="container">
    <h2>Все позиции</h2>
    <table class="table table-hover">
      <tr>
        <th>#
        <th>Серийный номер
        <th>Статус
        <th>Пакет
        <th>Доска
        <th>Бревно
        <th>Номер сушилки
        <th>Место в камере
        <th>Дата
      {%- for item in serials %}
      <tr class={{ "success" if item.done }}>
        <td><a href="/packets/{{ item.id }}">{{ item.id }}</a>
		<td>{{ item.status.name }}   </td>   
		<td>{{ item.packet.wh }} x {{ item.packet.ht}} </td>
		<td>{{ item.packet.boards.ht}} x {{ item.packet.boards.wh}}</td>
		<td><center>{{ item.packet.boards.timber.diam}} </center></td>
		<td>{{ item.dry.num }}</td>
		<td><center>{{ item.dry.place.place}}<center></td>
      {%- endfor %}
    </table>
  
</div>
{% endblock %}
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB