SQL Alchemy AttributeError: у объекта 'unicode' нет атрибута '_sa_instance_state' - PullRequest
0 голосов
/ 30 ноября 2018

Итак, я создаю базу данных пользователей, которые могут делать любимые вещи на сайте онлайн-покупок.Кажется, я получаю эту ошибку, хотя, когда я печатаю b.title и board, они оба печатают «u'board name».Должно быть так, чтобы, когда кто-то проверял флажок на доске, отношение этой вещи к доске было добавлено в базу данных.

<form action="" method="POST" name="boards_list">
          <table class="table is-striped">
            {% for board in boards %}
            <tr>
              <td>
                <label class="checkbox">
                  <input type="checkbox" name="board_titles" value="{{board.title}}"/>
                </label>
                <a href="#">{{board.title}}</a>
              </td>
            </tr>
            {% endfor %}
          </table>

          <div class="field is-grouped">
            <div class="control">
              <button type="submit" class="button is-small">Add To Favs</button>
            </div>
          </div>
        </form>

Это код из шаблона Jinja2, показанного выше.Ниже приведен код из корней:

if request.method =="POST":
            f_b_titles = request.form.getlist("board_titles")
            clothing = Clothing.query.filter_by(name = name).first()
            userid = int(current_user.id)
            clothingid = int(clothing.id)
            for b in boards:
                for board in f_b_titles:
                    if b.title == board:
                        fav_relationship = Favourites_relationship(user_id = userid, clothing_id = clothingid, favs_board = b.title)
                        db.session.add(fav_relationship)
                        db.session.commit()
                        flash('Added favourite to mood board!', 'success')

и, наконец, код из моделей дБ:

class Favourites_relationship(db.Model, UserMixin):
id = db.Column(db.Integer, primary_key=True)
user_id = db.Column(db.Integer, db.ForeignKey('user.id'), unique=True, nullable=False)
clothing_id = db.Column(db.Integer, db.ForeignKey('clothing.id'),nullable=False)
board_title = db.Column(db.Unicode, db.ForeignKey('favourites_board.title'), nullable=False)

и:

class Favourites_board(db.Model, UserMixin):
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(100), nullable=False)
user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)
favourites_relationships = db.relationship('Favourites_relationship', backref='favs_board', lazy=True)

Дополнительная информация об ошибках:

return self.wsgi_app(environ, start_response)

File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/flask/app.py", line 2295, in wsgi_app
response = self.handle_exception(e)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/flask/app.py", line 1741, in handle_exception
reraise(exc_type, exc_value, tb)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/flask/app.py", line 2292, in wsgi_app
response = self.full_dispatch_request()
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/flask/app.py", line 1815, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/flask/app.py", line 1718, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/flask/app.py", line 1813, in full_dispatch_request
rv = self.dispatch_request()
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/flask/app.py", line 1799, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "/Users/leawhitelaw/Desktop/online_shop_data/flaskshop/routes.py", line 97, in product_details
fav_relationship = Favourites_relationship(user_id = userid, clothing_id = clothingid, favs_board = b.title)

Ответы [ 2 ]

0 голосов
/ 30 ноября 2018
board_title = db.Column(db.Unicode, db.ForeignKey('favourites_board.title'), nullable=False)

эта строка неверна

из здесь

При использовании типа Unicode уместно передавать только объекты Unicode Python, ине ясно ул.Если простая строка передается в Python 2, выдается предупреждение.Если вы заметили, что ваше приложение отправляет эти предупреждения, но вы не уверены в их источнике, фильтр предупреждений Python, задокументированный как http://docs.python.org/library/warnings.html,, может использоваться для преобразования этих предупреждений в исключения, которые иллюстрируют трассировку стека:

Поскольку вы передаете необработанные значения из формы и ожидаете объекты Python.

попробуйте использовать:

db. String

db.Text

или db.Unicodetext

0 голосов
/ 30 ноября 2018

Попробуйте

fav_relationship = Favourites_relationship(user_id = userid, clothing_id = clothingid, favs_board = b)

По сути, ошибка говорит о том, что вы можете назначить только Favourites_board экземпляров (например, fb = Favourites_board()) для отношений.

Таким образом, предполагая, что доски - это списокиз Favourites_board экземпляров вы можете просто назначить доску (b) из этого списка на favs_board=....

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...