سفارشی سازی ارتباطات Customize communications
ابجکت های فرزند: ابجکت هایی هستند که فیلد foreign key آن ها با id ابجکت پدر پر شده است. یا به عبارتی دیگر فیلد foreign key مدل پدر را دارند. برای مثال مدل book که فیلد foreign key مدل writer را دارد (writer_id) ، فرزند است و مدل writer پدر است. گاهی نیاز داریم که در سرویسی از مدل فرزند به یکی دیگر از فرزندان مدل پدر برسیم .به عبارتی در سرویسی که برای مدل فرزند ایجاد شده است ، بخواهیم مدلی دیگر را از طریق کلیدی که از مدل پدر دارد نیز نمایش دهیم.قسمت سفارشی سازی ارتباطات Customize communications برای تسهیل در این کار می باشد.
در این صورت نیاز است که ازکد سریالایزر استفاده شود و در backend پروژه نیز کد نویسی شود .
در کد backend پروژه خود ، سریالایزری برای مدل پدر ایجاد می کنید و مدل دیگری که میخواهید در سرویس نمایش داده شود ( آن نیز فرزند مدل پدر است ) را در این کد توسط set_نام فرزند صدا می زنید.
سپس در سریالایزر سرویس مورد نظر در اریکس توسط یک خط کد ، قطعه کدی که نوشتید را فراخوانی می کنید .
حتی میتوانیم فرزند یا فرزندان مدلی که توسط (Set _نام فرزند) فراخوانی شده است را نمایش دهیم .
همانطور که گفته شد در کد سریالایزر قطعه کدی می نویسیم و در سریالایزر سرویس از طریق فیلدی که (set_ نام ) صدا زدیم ، فراخوانی می شود.
یعنی از سرویس یک مدل پدر ، می توان فرزندان دیگر مدل پدر و فرزند مدل مورد نظر را نمایش داد.
تمامی این موارد از طریق ارتباطات دیتابیس امکان پذیر است.
با یک مثال بهتر این موضوع را درک می کنید . در مثال زیر مدل writer پدر و book فرزند است.
در سرویسی که برای مدل writer ایجاد شده است ، book_set فراخوانی شده است . پس ابجکت فرزند هم در فراخوانی سرویس نمایش داده خواهد شد.
یک مدل به نام seller (فروشنده) و یک مدل دیگر به نام book_seller ایجاد می کنیم . book_seller فرزند مدل book و seller است.
سری پدر و فرزندی سه مدل به صورت زیر است :
writer > book > book_seller
seller > book_seller
در فایل serializer.py پروژه ( backend) قطعه کد زیر را می نویسیم.
در قطعه کد نوشته شده برای مدل book ، مدل book_seller که فرزند آن است ، صدا زده شده است.
class Book_With_Book_Seller_Serializer(serializers.ModelSerializer):
class Meta:
model = models.Book
fields = ['id', 'title', 'number_of_print', 'description', 'writer_id', 'book_seller_set',]
depth = 5
سپس در کد سریالایزر سرویس ، نام سریالایزر نوشته شده در backend توسط یک خط کد صدا زده می شود.
book_set = serializers.Book_With_Book_Seller_Serializer(many=True)