С этой упрощенной моделью:
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
# other attributes
#user many-to-many size associations (using link tables)
sz_shirt_dress_sleeve = db.relationship(
'SizeKeyShirtDressSleeve',
secondary=LinkUserSizeShirtDressSleeve,
backref=db.backref('users', lazy='dynamic'))
strange = {'whyisthisdifferent': db.relationship(
'SizeKeyShirtDressNeck',
secondary=LinkUserSizeShirtDressNeck,
backref=db.backref('users', lazy='dynamic'))}
Я бы предположил, что могу использовать оба из них для доступа к отношениям, но это не так.Смотрите этот интерактивный сеанс:
>>> from app import db
>>> from app.models import User
>>> u1 = User.query.first()
>>> u1
<User id: 1, email: 'admin@admin.com', password_hash: 'pbkdf2:sha256:50000$n2qsqVfu$8d1bc6b0a472818175c21c1a31031ece58e78feca9c6d15a326b28bd7fd80e67'>
>>> u1.strange['whyisthisdifferent']
<RelationshipProperty at 0x106c6d248; no key>
>>> u1.sz_shirt_dress_sleeve
[Dress shirt sleeve size: 3000]
Почему доступ по u1.sz_shirt_dress_sleeve
фактически возвращает результат запроса, когда u1.strange['whyisthisdifferent']
возвращает подпись отношения?Это напоминает мне разницу в Javascript между возвратом определения функции или литерала функции, но это не Javascript.
Я верю, что чтение документации прокси-сервера ассоциации SQLAlchemy действительно даст мнечто я хочу, но я все еще хотел бы понять это поведение.