Представление Flask-Admin не показывает столбец обратной ссылки

У меня есть приложение Flask, которое использует Flask-admin для панели инструментов и манипулирования объектами необработанной модели. Приложение имеет класс User для пользователей, которые входят на сайт, и класс Contact для контактов, введенных каждым пользователем.

Я хочу, чтобы каждая строка на вкладке «Контакты» в Flask-admin отображала адрес электронной почты пользователя, который ее ввел. Я установил код следующим образом:

class User(UserMixin, db.Model):
    id = db.Column(db.Integer, primary_key=True)
    contacts = db.relationship('Contact', backref='user')
    # [...]

    def __repr__(self):
        return f'{self.email}'

class Contact(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
    # [...]

При такой настройке столбец «Пользователь» не отображается. Я не исключаю этого, используя column_exclude_list. Я попытался использовать column_list, чтобы явно показать столбец «пользователь», и этот DID показал столбец, но он был пуст. (В конечном итоге я буду использовать это, но пока отключил его, чтобы упростить задачу.)

Помимо реализации __repr__() и включения отношения с обратной ссылкой, связывающей два объекта модели, что мне нужно сделать, чтобы появился этот столбец? Как я могу отладить, почему он не отображается?

В какой-то момент я заметил, что у меня было объявлено второе отношение с обратной ссылкой, также называемой 'user' в классе Export. Export.user работал! Когда я впервые заметил это, я отключил вторую связь, но это не исправило связь Contact.user.


person Nick K9    schedule 25.03.2019    source источник


Ответы (1)


В ходе написания этого вопроса я понял, что было не так. У меня была функция, которую я использовал для получения контактов, введенных данным пользователем. Эта функция?

class User(UserMixin, db.Model):
    def contacts(self):
        return db.session.query(Contact).filter(Contact.user_id == current_user.id)

Таким образом, функция contacts конфликтовала со статической переменной отношения contacts. Как только я переименовал функцию, столбец появился, как и ожидалось.

person Nick K9    schedule 25.03.2019