ЛОР, помоги, я сжёг все силы и не понял. Тут нужен настоящий программист.
Есть две таблицы, связанные отношением many-to-many. Типа люди и типа события. Определено, минимально, так:
class Contact(db.Model):
id = db.Column(db.Integer, primary_key=True)
meetings = db.relationship(
'Event', secondary=events, order_by="desc(Event.id)",
backref=db.backref('participants', lazy='dynamic'), lazy='dynamic')
class Event(db.Model):
id = db.Column(db.Integer, primary_key=True)
deleted = db.Column(db.Boolean, default=False, nullable=False)
date = db.Column(db.DateTime, default=datetime.utcnow)
Собирался сделать страницу, которая будет показывать все события для одного человека. Соответственно, берём человека и отправляем рендериться в шаблон:
contact = Contact.query.filter_by(id=contact_id).first_or_404()
return render_template('events.html', contact = contact)
В шаблоне из человека вытаскиваются его события и циклом вываливаются на страницу:
{% for meeting in contact.meetings %}
<p>{{ meeting.id}} - {{ meeting.date }}</p>
{% endfor %}
Это всё в первом приближении работает прекрасно. Так же прекрасно работает, если я фильтрую события по признаку «не удалены»:
{% for meeting in contact.meetings.filter_by(deleted=False) %}
# Перфекто
Тучи сгущаются, когда я хочу отфильтровать события по наличию даты. Передо мной возникают два стула:
- Взять проверенный .filter_by(), которым я вроде научился пользоваться. Но я не знаю, как попросить его сделать NOT NULL. Попытки типа date!=None или date>0 приводят к разнообразным эксепшонам и всё.
- Взять .filter(), в котором вроде бы всё можно. Но я не могу объяснить ему, что такое date; на .filter(date.is_(None)) он упорно утверждает, что не знает такую переменную. Советы на SO настолько не похожи на мой код, что для их примения нужно переписать программу, поменять фреймворк, выучить другой язык, сметить пол и улететь на другую планету.
Не могу больше думать, спасите.
ЗЫ Если где соврал, то не со зла, просто тысячу вариантов уже перепробовал.