🎉 سال نو، مهارت نو، مشاوره رایگان نقشه راه برنامه نویسی (آفر ویژه ثبت نام قبل از افزایش قیمت 🔥)
۰ ثانیه
۰ دقیقه
۰ ساعت
۱ Afravi Mostafa
related_name and __str
جامعه پایتون (وب) ایجاد شده در ۲۹ تیر ۱۴۰۲

az related_name che astefade mishe?

motviche nashodam chra def __str ro neveshtim ?

سلام مصطفی جان

وقت بخیر

سوال هاتون رو ممنون میشم فینگلیش تایپ نکنید


اما جواب:

در جنگو (Django)، related_name یک ویژگی است که به شما امکان می‌دهد نام مخصوص برای رابطه‌های معکوس (reverse relationships) در مدل‌ها تعیین کنید. زمانی که بین دو مدل رابطه‌ای ایجاد می‌کنید، جنگو به صورت خودکار نام معکوس برای رابطه را بر اساس اسم مدل مقصد تعیین می‌کند. اما با استفاده از related_name می‌توانید نام معکوس را به دلخواه خود تغییر دهید.

برای بهتر درک کاربرد related_name، نگاهی به مثال زیر بیندازید:

فرض کنید دو مدل به نام‌های Author و Book داریم که با یک رابطه یک به چند (one-to-many) به هم مرتبط هستند. یعنی یک نویسنده می‌تواند چندین کتاب داشته باشد و هر کتاب نیز متعلق به یک نویسنده است.

from django.db import models
class Author(models.Model):
    name = models.CharField(max_length=100)
class Book(models.Model):
    title = models.CharField(max_length=200)
    author = models.ForeignKey(Author, on_delete=models.CASCADE)

در این مثال، برای رابطه‌ی Book به نویسنده (Author)، اگر هیچ related_name خاصی تعیین نکنید، جنگو نام معکوس را به صورت پیش‌فرض به "book_set" تنظیم خواهد کرد. این به معنای این است که شما می‌توانید تمام کتاب‌های مرتبط با یک نویسنده را با استفاده از book_set به دست آورید.\\


اما با استفاده از related_name می‌توانید نام معکوس را به شکل دلخواهی تغییر دهید. به عنوان مثال:

class Book(models.Model):
    title = models.CharField(max_length=200)
    author = models.ForeignKey(Author, on_delete=models.CASCADE, related_name='books')

حالا با تعیین related_name='books' در رابطه‌ی Book، شما می‌توانید به کتاب‌های مرتبط با نویسنده با استفاده از این نام معکوس دسترسی پیدا کنید:

author = Author.objects.get(pk=1)
books = author.books.all()
بهترین پاسخ
پوریا شفیعی ۲۹ تیر ۱۴۰۲، ۱۸:۱۹