я пытаюсь написать приложение, похожее на Tinder. Я создал модели:
class User(db.Model, UserMixin):
id = db.Column('id', db.Integer, primary_key=True)
email = db.Column(db.String(100), unique=True, nullable=False)
name = db.Column(db.String(20), nullable=False)
age = db.Column(db.Integer, nullable=False)
description = db.Column(db.String(200), default='')
gender = db.Column(db.String(6), nullable=False)
image = db.Column(db.String(20), nullable=False, default='default.jpg')
password = db.Column(db.String(60), nullable=False)
likes = db.relationship('Like', backref='liked_by', lazy=True)
def __repr__(self):
return f'User({self.name}, {self.gender}, {self.age}, {self.image})'
class Like(db.Model):
id = db.Column('id', db.Integer, primary_key=True)
like_to = db.Column(db.Integer)
user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)
Я хочу, чтобы current_user не мог видеть пользователя на главной странице, если он ему уже понравился. И вот моя задача создать соответствующее условие. Теперь это выглядит так и не работает:
{% block content %}
{% for user in users %}
{% if current_user.gender != user.gender %}
{% **if user.id not in current_user.likes** %}
<form action="{{ url_for('like_profile', user_id=user.id) }}" method="POST">
{{ form.hidden_tag() }}
<p>{{ user.name }}</p>
<p>{{ user.gender }}</p>
<p>{{ user.age }}</p>
<p>User id: {{ user.id }}</p>
<p>User likes: {{ user.likes }}</p>
<p>{{ form.submit }}</p>
</form>
{% endif %}
{% endif %}
{% endfor %}
{% endblock %}
Эта строка: если user.id нет в current_user.likes - как мне это сделать?
Функция, которая создает как :
@app.route('/profile/<int:user_id>', methods=['POST'])
def like_profile(user_id):
user = User.query.get_or_404(user_id)
like = Like(like_to=user.id, liked_by=current_user)
db.session.add(like)
db.session.commit()
flash(f'Like has been given to {user} from {current_user}. {type(current_user.likes)}')
return redirect(url_for('home'))