0Pricing
Django Academy · درس

related_name وعمليات البحث العكسية

التنقل عبر العلاقات في كلا الاتجاهين

related_name وعمليات البحث العكسية درس مجاني في Django Academy على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Django Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Django Academy 4 دروس في المجموع.

بعض أجزاء هذا الدرس لم تُترجم بعد وتظهر باللغة الإنجليزية.

Links Go Both Ways

You set a ForeignKey from book to author, but you can also walk it backward. A reverse lookup reaches the many side from the one side.

The Default _set Manager

By default Django names the reverse accessor modelname_set. From an author, the books appear as book_set.

author = Author.objects.first()
author.book_set.all()

_set Is a Manager

That book_set is a full manager, so you can chain filter, order_by, and count on it just like any query.

author.book_set.filter(published=True).count()

Naming with related_name

The _set name is clunky. Set related_name on the ForeignKey to pick a clearer reverse accessor yourself.

author = models.ForeignKey(Author, related_name="books", on_delete=models.CASCADE)

A Cleaner Reverse

Now the reverse reads naturally. Instead of book_set you simply write books, which is far easier to follow.

author.books.all()

Reverse in Queries

related_name also drives filter across the link. Use the chosen name with the double underscore from the other model.

Author.objects.filter(books__published=True)

The Default Query Name

If you skip related_name, the reverse query name is the lowercase model name, like author.objects.filter(book__title=...).

Avoiding Name Clashes

Two ForeignKeys from one model to the same target collide on the reverse name. A distinct related_name on each fixes it.

writer = models.ForeignKey(User, related_name="written", on_delete=models.CASCADE)
editor = models.ForeignKey(User, related_name="edited", on_delete=models.CASCADE)

Turning Off the Reverse

Set related_name to a value ending in + to disable the reverse accessor entirely when you never need it.

owner = models.ForeignKey(User, related_name="+", on_delete=models.CASCADE)

related_query_name

You can split the names: related_query_name sets the filter name separately from the attribute used to read related rows.

tags = models.ManyToManyField(Tag, related_name="posts", related_query_name="post")

Works for Every Relation

related_name applies to ForeignKey, ManyToManyField, and OneToOneField alike, so every reverse path can read clearly.

Quick Check

You set related_name="books" on Book's author ForeignKey. How do you list an author's books?

Recap

You did it! Reverse lookups walk a link backward, and related_name turns clunky _set accessors into clear, readable names. 🔄

الأسئلة الشائعة

هل درس «related_name وعمليات البحث العكسية» مجاني؟

نعم — نص درس «related_name وعمليات البحث العكسية» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Django Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Django Academy 4 دروس في المجموع.

ماذا ستتعلم في «related_name وعمليات البحث العكسية»؟

التنقل عبر العلاقات في كلا الاتجاهين تتمرن على Django Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Django Academy؟

لا تُشترط خبرة سابقة. Django Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.

كم من الوقت يستغرق درس «related_name وعمليات البحث العكسية»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Django Academy هذا؟

نعم. كل درس في Django Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. ForeignKey و on_delete
  2. ManyToManyField ونماذج Through
  3. OneToOneField للملفات الشخصية
  4. related_name وعمليات البحث العكسية
← العودة إلى Django Academy