واحد لكثير: ForeignKey
class Author(models.Model):
name = models.CharField(max_length=100)
class Post(models.Model):
title = models.CharField(max_length=200)
author = models.ForeignKey(Author, on_delete=models.CASCADE,
related_name="posts")
الوصول:
post.author.name # كاتب المنشور
author.posts.all() # كل منشورات الكاتب (related_name)
on_delete
on_delete=models.CASCADE # حذف المنشورات بحذف الكاتب
on_delete=models.SET_NULL # ضبطها NULL (مع null=True)
on_delete=models.PROTECT # منع الحذف
كثير لكثير: ManyToManyField
class Tag(models.Model):
name = models.CharField(max_length=50)
class Post(models.Model):
tags = models.ManyToManyField(Tag, related_name="posts")
post.tags.add(tag)
post.tags.all()
tag.posts.all()
واحد لواحد: OneToOneField
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
💡 استخدم
select_related(FK) وprefetch_related(M2M) لتقليل عدد الاستعلامات.
🎯 التالي: واجهات REST مع DRF.