Bu bölümde Twitter benzeri bir takip etme (followers) özelliği uygulamaya eklenecek. Veritabanı ilişki türleri gözden geçirilecek, many-to-many ilişkisi ve self-referential (öz referanslı) ilişki tasarımı, karmaşık SQL sorguları ve birim testleri ele alınacak.
Bir kullanıcının çok sayıda gönderisi olabilir. "Çok" tarafında yabancı anahtar (foreign key) tutulur. Bölüm 4'te Post.user_id ile uygulandı.
Bir kullanıcı çok sayıda kullanıcıyı takip edebilir; bir kullanıcının da çok sayıda takipçisi olabilir. Bu ilişki için ara tablo (association table) gerekir.
Takip etme özelliğinde her iki taraf da User modelidir. Bir sınıfın kendi örnekleriyle ilişkilendirilmesi self-referential relationship olarak adlandırılır.
app/models.py — followers Ara Tablosunu EkleUser sınıfının üstüne ekle:
sa.Table ile tanımlanır.app/models.py — User Sınıfına İlişkileri Ekleclass User(UserMixin, db.Model):
# ...
following: so.WriteOnlyMapped['User'] = so.relationship(
secondary=followers, primaryjoin=(followers.c.follower_id == id),
secondaryjoin=(followers.c.followed_id == id),
back_populates='followers')
followers: so.WriteOnlyMapped['User'] = so.relationship(
secondary=followers, primaryjoin=(followers.c.followed_id == id),
secondaryjoin=(followers.c.follower_id == id),
back_populates='following')