{"id":1252,"date":"2023-07-25T08:06:41","date_gmt":"2023-07-25T08:06:41","guid":{"rendered":"https:\/\/engelias.website\/blog\/?p=1252"},"modified":"2023-07-25T09:10:01","modified_gmt":"2023-07-25T09:10:01","slug":"simplifying-crud-operations-with-django-rest-framework-serializers-and-relatedfields-2","status":"publish","type":"post","link":"https:\/\/engelias.website\/blog\/simplifying-crud-operations-with-django-rest-framework-serializers-and-relatedfields-2\/","title":{"rendered":"Simplifying CRUD Operations with Django REST Framework Serializers and RelatedFields"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-post\" data-elementor-id=\"1252\" class=\"elementor elementor-1252\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-7e50104 elementor-section-boxed elementor-section-height-default elementor-section-height-default wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no\" data-id=\"7e50104\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-955387c\" data-id=\"955387c\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-b6aef7c elementor-widget elementor-widget-wpr-post-title\" data-id=\"b6aef7c\" data-element_type=\"widget\" data-widget_type=\"wpr-post-title.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<h1 class=\"wpr-post-title\">Simplifying CRUD Operations with Django REST Framework Serializers and RelatedFields<\/h1>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-42ccabf elementor-widget elementor-widget-wpr-post-media\" data-id=\"42ccabf\" data-element_type=\"widget\" data-widget_type=\"wpr-post-media.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<div class=\"wpr-featured-media-wrap\" data-caption=\"standard\"><div class=\"wpr-featured-media-image\" data-src=\"https:\/\/engelias.website\/blog\/wp-content\/uploads\/2023\/07\/Django-Rest-Framework-1200x798-1.jpg\"><img decoding=\"async\" src=\"https:\/\/engelias.website\/blog\/wp-content\/uploads\/2023\/07\/Django-Rest-Framework-1200x798-1.jpg\" alt=\"\"><\/div><\/div>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-601b94f elementor-section-boxed elementor-section-height-default elementor-section-height-default wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no\" data-id=\"601b94f\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-top-column elementor-element elementor-element-4f148af\" data-id=\"4f148af\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-6f4cbb0 wpr-post-info-align-center elementor-widget elementor-widget-wpr-post-info\" data-id=\"6f4cbb0\" data-element_type=\"widget\" data-widget_type=\"wpr-post-info.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<ul class=\"wpr-post-info wpr-post-info-vertical\"><li class=\"wpr-post-info-taxonomy\"><span class=\"wpr-post-info-text\"><\/span><span>Programming<\/span><\/li><li class=\"wpr-post-info-date\"><span class=\"wpr-post-info-text\"><\/span><span>July 25, 2023<\/span><\/li><\/ul>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-top-column elementor-element elementor-element-a0dc9ab\" data-id=\"a0dc9ab\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-a915268 wpr-author-box-arrange-left elementor-widget elementor-widget-wpr-author-box\" data-id=\"a915268\" data-element_type=\"widget\" data-widget_type=\"wpr-author-box.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<div class=\"wpr-author-box\"><div class=\"wpr-author-box-image\"><img alt='' src='https:\/\/secure.gravatar.com\/avatar\/507b21d461987cad31fe69fa52e20fab?s=264&#038;d=mm&#038;r=g' class='avatar avatar-264 photo' height='264' width='264' \/><\/div><div class=\"wpr-author-box-text\"><P class=\"wpr-author-box-name\">Elias Owis<\/P><span class=\"wpr-author-box-title\">Software Engineer<\/span><\/div><\/div>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-f3d6b9e elementor-section-boxed elementor-section-height-default elementor-section-height-default wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no\" data-id=\"f3d6b9e\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-fe30e24\" data-id=\"fe30e24\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-0c3e089 toc-header elementor-widget elementor-widget-heading\" data-id=\"0c3e089\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<style>\/*! elementor - v3.20.0 - 20-03-2024 *\/\n.elementor-heading-title{padding:0;margin:0;line-height:1}.elementor-widget-heading .elementor-heading-title[class*=elementor-size-]>a{color:inherit;font-size:inherit;line-height:inherit}.elementor-widget-heading .elementor-heading-title.elementor-size-small{font-size:15px}.elementor-widget-heading .elementor-heading-title.elementor-size-medium{font-size:19px}.elementor-widget-heading .elementor-heading-title.elementor-size-large{font-size:29px}.elementor-widget-heading .elementor-heading-title.elementor-size-xl{font-size:39px}.elementor-widget-heading .elementor-heading-title.elementor-size-xxl{font-size:59px}<\/style><h2 class=\"elementor-heading-title elementor-size-default\">Introduction:<\/h2>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-431101a elementor-widget elementor-widget-text-editor\" data-id=\"431101a\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<style>\/*! elementor - v3.20.0 - 20-03-2024 *\/\n.elementor-widget-text-editor.elementor-drop-cap-view-stacked .elementor-drop-cap{background-color:#69727d;color:#fff}.elementor-widget-text-editor.elementor-drop-cap-view-framed .elementor-drop-cap{color:#69727d;border:3px solid;background-color:transparent}.elementor-widget-text-editor:not(.elementor-drop-cap-view-default) .elementor-drop-cap{margin-top:8px}.elementor-widget-text-editor:not(.elementor-drop-cap-view-default) .elementor-drop-cap-letter{width:1em;height:1em}.elementor-widget-text-editor .elementor-drop-cap{float:left;text-align:center;line-height:1;font-size:50px}.elementor-widget-text-editor .elementor-drop-cap-letter{display:inline-block}<\/style>\t\t\t\t<p>Django REST Framework (DRF) is a powerful tool for building APIs in Django applications. One of its standout features is serializers, which offer a seamless way to handle data transformation while allowing developers to focus on the core logic of their application. In this article, we will delve into one of the most useful features of DRF serializers &#8211; RelatedField. We&#8217;ll explore how to effectively use RelatedField to manage ForeignKey fields in models, enabling us to send and receive data using any HTTP method with just one serializer. Get ready to discover a simple and robust method to handle CRUD operations in your Django projects with minimal code!<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-d451246 elementor-section-boxed elementor-section-height-default elementor-section-height-default wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no\" data-id=\"d451246\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-7ba17cb\" data-id=\"7ba17cb\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-6e9a3e8 toc-header elementor-widget elementor-widget-heading\" data-id=\"6e9a3e8\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Understanding the Power of Serializers:<\/h2>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d06db3f elementor-widget elementor-widget-text-editor\" data-id=\"d06db3f\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p>DRF serializers act as intermediaries between the application&#8217;s data models and the external representation of that data. By encapsulating data transformation operations, they facilitate a cleaner separation between the data exchange process and the underlying logic. This empowers developers to create more efficient and maintainable code.<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-c73dab4 elementor-section-boxed elementor-section-height-default elementor-section-height-default wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no\" data-id=\"c73dab4\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-5d797c3\" data-id=\"5d797c3\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-3407cb5 toc-header elementor-widget elementor-widget-heading\" data-id=\"3407cb5\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">The Magic of RelatedField:<\/h2>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ef2348f elementor-widget elementor-widget-text-editor\" data-id=\"ef2348f\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p>Among the gems in DRF serializers, RelatedField stands out as a powerful tool for working with ForeignKey fields in models. By default, when a ForeignKey is serialized, it appears as an integer representing the related object&#8217;s primary key. However, with RelatedField, we can transform this representation into the actual related object, making the output more informative and user-friendly.<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-f53da6b elementor-section-boxed elementor-section-height-default elementor-section-height-default wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no\" data-id=\"f53da6b\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-da0cf62\" data-id=\"da0cf62\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-baefa35 toc-header elementor-widget elementor-widget-heading\" data-id=\"baefa35\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Let's Dive into an Example:<\/h2>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-cdb2178 elementor-widget elementor-widget-text-editor\" data-id=\"cdb2178\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p>To illustrate the usage of RelatedField, let&#8217;s consider an example with two models: <span class=\"notion-enable-hover\" style=\"font-family: 'SFMono-Regular', Menlo, Consolas, 'PT Mono', 'Liberation Mono', Courier, monospace; line-height: normal; background: rgba(135,131,120,0.15); color: #eb5757; border-radius: 3px; font-size: 85%; padding: 0.2em 0.4em;\" spellcheck=\"false\" data-token-index=\"1\">DuelCard<\/span> and <span class=\"notion-enable-hover\" style=\"font-family: 'SFMono-Regular', Menlo, Consolas, 'PT Mono', 'Liberation Mono', Courier, monospace; line-height: normal; background: rgba(135,131,120,0.15); color: #eb5757; border-radius: 3px; font-size: 85%; padding: 0.2em 0.4em;\" spellcheck=\"false\" data-token-index=\"3\">Duelist<\/span>. The <span class=\"notion-enable-hover\" style=\"font-family: 'SFMono-Regular', Menlo, Consolas, 'PT Mono', 'Liberation Mono', Courier, monospace; line-height: normal; background: rgba(135,131,120,0.15); color: #eb5757; border-radius: 3px; font-size: 85%; padding: 0.2em 0.4em;\" spellcheck=\"false\" data-token-index=\"5\">Duelist<\/span> model has a ForeignKey field, <span class=\"notion-enable-hover\" style=\"font-family: 'SFMono-Regular', Menlo, Consolas, 'PT Mono', 'Liberation Mono', Courier, monospace; line-height: normal; background: rgba(135,131,120,0.15); color: #eb5757; border-radius: 3px; font-size: 85%; padding: 0.2em 0.4em;\" spellcheck=\"false\" data-token-index=\"7\">favourite_card<\/span>, linking it to the <span class=\"notion-enable-hover\" style=\"font-family: 'SFMono-Regular', Menlo, Consolas, 'PT Mono', 'Liberation Mono', Courier, monospace; line-height: normal; background: rgba(135,131,120,0.15); color: #eb5757; border-radius: 3px; font-size: 85%; padding: 0.2em 0.4em;\" spellcheck=\"false\" data-token-index=\"9\">DuelCard<\/span> model.<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-af01da7 elementor-widget elementor-widget-text-editor\" data-id=\"af01da7\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<pre>class DuelCard(models.Model):<br \/>\u00a0\u00a0\u00a0 name = models.CharField(max_length=100)<br \/>\u00a0\u00a0\u00a0 description = models.TextField(max_length=1000, blank=True, null=True)<br \/>\u00a0\u00a0\u00a0 type = models.CharField(choices=[('monster', 'Monster'), ('spell', 'Spell'), ('trap', 'Trap')], max_length=20)<br \/><br \/><br \/>class Duelist(models.Model):<br \/>\u00a0\u00a0\u00a0 name = models.CharField(max_length=50)<br \/>\u00a0\u00a0\u00a0 age = models.PositiveSmallIntegerField(blank=True, null=True)<br \/>\u00a0\u00a0\u00a0 favourite_card = models.ForeignKey(DuelCard, on_delete=models.SET_NULL, blank=True, null=True)<\/pre>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-9cffe3d elementor-widget elementor-widget-text-editor\" data-id=\"9cffe3d\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p>The simplest serializer to handle this scenario would be as follows:<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-37ddd0a elementor-widget elementor-widget-text-editor\" data-id=\"37ddd0a\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<pre>class DuelCardSerializer(serializers.ModelSerializer):<br \/>\u00a0\u00a0\u00a0 class Meta:<br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 model = DuelCard<br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 fields = '__all__'<br \/><br \/><br \/>class DuelistSerializer(serializers.ModelSerializer):<br \/>\u00a0\u00a0\u00a0 class Meta:<br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 model = Duelist<br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 fields = '__all__'<\/pre>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-8e9fc55 elementor-widget elementor-widget-text-editor\" data-id=\"8e9fc55\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p>However, this basic serializer represents the <span class=\"notion-enable-hover\" style=\"font-family: 'SFMono-Regular', Menlo, Consolas, 'PT Mono', 'Liberation Mono', Courier, monospace; line-height: normal; background: rgba(135,131,120,0.15); color: #eb5757; border-radius: 3px; font-size: 85%; padding: 0.2em 0.4em;\" spellcheck=\"false\" data-token-index=\"1\">favourite_card<\/span> field as an integer, not the actual <span class=\"notion-enable-hover\" style=\"font-family: 'SFMono-Regular', Menlo, Consolas, 'PT Mono', 'Liberation Mono', Courier, monospace; line-height: normal; background: rgba(135,131,120,0.15); color: #eb5757; border-radius: 3px; font-size: 85%; padding: 0.2em 0.4em;\" spellcheck=\"false\" data-token-index=\"3\">DuelCard<\/span> object. To address this, we can enhance our serializer with RelatedField:<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-097a959 elementor-widget elementor-widget-text-editor\" data-id=\"097a959\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<pre>class DuelCardSerializer(serializers.ModelSerializer):<br \/>\u00a0\u00a0\u00a0 class Meta:<br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 model = DuelCard<br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 fields = '__all__'<br \/><br \/><br \/>class DuelCardField(serializers.RelatedField):<br \/><br \/>\u00a0\u00a0\u00a0 def to_representation(self, value):<br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 return DuelCardSerializer(value, context=self.context).data<br \/><br \/><br \/>class DuelistSerializer(serializers.ModelSerializer):<br \/>\u00a0\u00a0\u00a0 favourite_card = DuelCardField(queryset=DuelCard.objects.all())<br \/><br \/>\u00a0\u00a0\u00a0 class Meta:<br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 model = Duelist<br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 fields = '__all__'<\/pre>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e44b090 elementor-widget elementor-widget-text-editor\" data-id=\"e44b090\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p>With this modification, our <span class=\"notion-enable-hover\" style=\"font-family: 'SFMono-Regular', Menlo, Consolas, 'PT Mono', 'Liberation Mono', Courier, monospace; line-height: normal; background: rgba(135,131,120,0.15); color: #eb5757; border-radius: 3px; font-size: 85%; padding: 0.2em 0.4em;\" spellcheck=\"false\" data-token-index=\"1\">Duelist<\/span> serializer now includes the <span class=\"notion-enable-hover\" style=\"font-family: 'SFMono-Regular', Menlo, Consolas, 'PT Mono', 'Liberation Mono', Courier, monospace; line-height: normal; background: rgba(135,131,120,0.15); color: #eb5757; border-radius: 3px; font-size: 85%; padding: 0.2em 0.4em;\" spellcheck=\"false\" data-token-index=\"3\">favourite_card<\/span> field represented as the actual <span class=\"notion-enable-hover\" style=\"font-family: 'SFMono-Regular', Menlo, Consolas, 'PT Mono', 'Liberation Mono', Courier, monospace; line-height: normal; background: rgba(135,131,120,0.15); color: #eb5757; border-radius: 3px; font-size: 85%; padding: 0.2em 0.4em;\" spellcheck=\"false\" data-token-index=\"5\">DuelCard<\/span> object.<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-27d94c6 elementor-widget elementor-widget-heading\" data-id=\"27d94c6\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Making the Serializer Data Ready for Reception:<\/h3>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-bfd9a9f elementor-widget elementor-widget-text-editor\" data-id=\"bfd9a9f\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p>To enable the serializer to handle incoming data efficiently, we need to define <span class=\"notion-enable-hover\" style=\"font-family: 'SFMono-Regular', Menlo, Consolas, 'PT Mono', 'Liberation Mono', Courier, monospace; line-height: normal; background: rgba(135,131,120,0.15); color: #eb5757; border-radius: 3px; font-size: 85%; padding: 0.2em 0.4em;\" spellcheck=\"false\" data-token-index=\"1\">to_internal_value<\/span>. This method transforms the received data, whether it&#8217;s an integer, string, or any other type, into a model object. This also allows for data validation.<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-dff6e4c elementor-widget elementor-widget-text-editor\" data-id=\"dff6e4c\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<pre>class DuelCardField(serializers.RelatedField):<br \/><br \/>\u00a0\u00a0\u00a0 def to_internal_value(self, data):<br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 try:<br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 duel_card_id = data<br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 return DuelCard.objects.get(id=duel_card_id)<br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 except ValueError:<br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 raise serializers.ValidationError(<br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 'Duel card id must be an integer.'<br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 )<br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 except DuelCard.DoesNotExist:<br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 raise serializers.ValidationError(<br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 'Duel card does not exist.'<br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 )<br \/><br \/>\u00a0\u00a0\u00a0 def to_representation(self, value):<br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 return DuelCardSerializer(value, context=self.context).data<\/pre>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-28e18ad elementor-widget elementor-widget-heading\" data-id=\"28e18ad\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Creating Class-Based Views for CRUD Operations:<\/h3>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-22e6535 elementor-widget elementor-widget-text-editor\" data-id=\"22e6535\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p>To complete the process, we can create class-based views to perform CRUD operations using our serializer.<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e7d6b3d elementor-widget elementor-widget-text-editor\" data-id=\"e7d6b3d\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<pre>class DuelCardListCreateAPIView(ListCreateAPIView):<br \/>\u00a0\u00a0\u00a0 queryset = DuelCard.objects.all()<br \/>\u00a0\u00a0\u00a0 serializer_class = DuelCardSerializer<br \/><br \/><br \/>class DuelCardRetrieveUpdateDestroyAPIView(RetrieveUpdateDestroyAPIView):<br \/>\u00a0\u00a0\u00a0 queryset = DuelCard.objects.all()<br \/>\u00a0\u00a0\u00a0 serializer_class = DuelCardSerializer<br \/>\u00a0\u00a0\u00a0 lookup_field = 'id'<br \/><br \/><br \/>class DuelistListCreateAPIView(ListCreateAPIView):<br \/>\u00a0\u00a0\u00a0 queryset = Duelist.objects.all()<br \/>\u00a0\u00a0\u00a0 serializer_class = DuelistSerializer<br \/><br \/><br \/>class DuelistRetrieveUpdateDestroyAPIView(RetrieveUpdateDestroyAPIView):<br \/>\u00a0\u00a0\u00a0 queryset = Duelist.objects.all()<br \/>\u00a0\u00a0\u00a0 serializer_class = DuelistSerializer<br \/>\u00a0\u00a0\u00a0 lookup_field = 'id'<\/pre>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-6b42414 elementor-widget elementor-widget-heading\" data-id=\"6b42414\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Sending Requests To These Views:<\/h2>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-9041cbe elementor-widget elementor-widget-image\" data-id=\"9041cbe\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<style>\/*! elementor - v3.20.0 - 20-03-2024 *\/\n.elementor-widget-image{text-align:center}.elementor-widget-image a{display:inline-block}.elementor-widget-image a img[src$=\".svg\"]{width:48px}.elementor-widget-image img{vertical-align:middle;display:inline-block}<\/style>\t\t\t\t\t\t\t\t\t\t<img fetchpriority=\"high\" decoding=\"async\" width=\"1024\" height=\"550\" src=\"https:\/\/engelias.website\/blog\/wp-content\/uploads\/2023\/07\/Screenshot-2023-07-24-120437-1024x550.jpg\" class=\"attachment-large size-large wp-image-1240\" alt=\"\" srcset=\"https:\/\/engelias.website\/blog\/wp-content\/uploads\/2023\/07\/Screenshot-2023-07-24-120437-1024x550.jpg 1024w, https:\/\/engelias.website\/blog\/wp-content\/uploads\/2023\/07\/Screenshot-2023-07-24-120437-300x161.jpg 300w, https:\/\/engelias.website\/blog\/wp-content\/uploads\/2023\/07\/Screenshot-2023-07-24-120437-768x412.jpg 768w, https:\/\/engelias.website\/blog\/wp-content\/uploads\/2023\/07\/Screenshot-2023-07-24-120437-1536x825.jpg 1536w, https:\/\/engelias.website\/blog\/wp-content\/uploads\/2023\/07\/Screenshot-2023-07-24-120437.jpg 1920w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-614d0ab elementor-widget elementor-widget-image\" data-id=\"614d0ab\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"1024\" height=\"550\" src=\"https:\/\/engelias.website\/blog\/wp-content\/uploads\/2023\/07\/Screenshot-2023-07-24-120949-1024x550.jpg\" class=\"attachment-large size-large wp-image-1241\" alt=\"\" srcset=\"https:\/\/engelias.website\/blog\/wp-content\/uploads\/2023\/07\/Screenshot-2023-07-24-120949-1024x550.jpg 1024w, https:\/\/engelias.website\/blog\/wp-content\/uploads\/2023\/07\/Screenshot-2023-07-24-120949-300x161.jpg 300w, https:\/\/engelias.website\/blog\/wp-content\/uploads\/2023\/07\/Screenshot-2023-07-24-120949-768x412.jpg 768w, https:\/\/engelias.website\/blog\/wp-content\/uploads\/2023\/07\/Screenshot-2023-07-24-120949-1536x825.jpg 1536w, https:\/\/engelias.website\/blog\/wp-content\/uploads\/2023\/07\/Screenshot-2023-07-24-120949.jpg 1920w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-d8f3881 elementor-section-boxed elementor-section-height-default elementor-section-height-default wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no\" data-id=\"d8f3881\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-16d0291\" data-id=\"16d0291\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-458d6e9 toc-header elementor-widget elementor-widget-heading\" data-id=\"458d6e9\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Conclusion:<\/h2>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-b5194b2 elementor-widget elementor-widget-text-editor\" data-id=\"b5194b2\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p>In conclusion, Django REST Framework serializers, particularly RelatedField, offer a powerful and straightforward approach to handle ForeignKey fields and simplify the API development process. By optimizing the representation of data and seamlessly managing data reception, we can build robust APIs for CRUD operations with minimal lines of code. Embrace the potential of DRF serializers, and explore more possibilities to enhance your Django applications!<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-132d51c elementor-section-boxed elementor-section-height-default elementor-section-height-default wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no\" data-id=\"132d51c\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-e5bdb00\" data-id=\"e5bdb00\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-2c9adbb toc-header elementor-widget elementor-widget-heading\" data-id=\"2c9adbb\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Share Your Thoughts:<\/h2>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-45abb41 elementor-widget elementor-widget-text-editor\" data-id=\"45abb41\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p>I hope you found this article helpful in understanding the magic of DRF serializers and how RelatedField can streamline your API development process. If you have any comments, suggestions, or ideas for collaboration, please feel free to share them below. Let&#8217;s continue to improve our code together and create even better applications!<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-5400d39 elementor-section-boxed elementor-section-height-default elementor-section-height-default wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no\" data-id=\"5400d39\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-top-column elementor-element elementor-element-b0f9fd4\" data-id=\"b0f9fd4\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-ae03dcb elementor-widget elementor-widget-text-editor\" data-id=\"ae03dcb\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p>If you liked this content, please share it.<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-top-column elementor-element elementor-element-420f7b7\" data-id=\"420f7b7\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-565e68c elementor-grid-0 elementor-widget elementor-widget-wpr-sharing-buttons\" data-id=\"565e68c\" data-element_type=\"widget\" data-widget_type=\"wpr-sharing-buttons.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<div class=\"wpr-sharing-buttons elementor-grid wpr-sharing-official wpr-sharing-label-off wpr-sharing-label-tr\"><div class=\"elementor-grid-item\"><a href=\"https:\/\/www.linkedin.com\/shareArticle?mini=true&url=https:\/\/engelias.website\/blog\/simplifying-crud-operations-with-django-rest-framework-serializers-and-relatedfields-2\/&title=Simplifying CRUD Operations with Django REST Framework Serializers and RelatedFields&summary=Simplifying CRUD Operations with Django REST Framework Serializers and RelatedFields Programming July 25, 2023 Elias OwisSoftware Engineer Introduction: Django REST Framework (DRF) is a powerful tool for building APIs in Django applications. One of its standout features is serializers, which offer a seamless way to handle data transformation while allowing developers to focus on the &hellip;&lt;p class=&quot;read-more&quot;&gt; &lt;a class=&quot;&quot; href=&quot;https:\/\/engelias.website\/blog\/simplifying-crud-operations-with-django-rest-framework-serializers-and-relatedfields-2\/&quot;&gt; &lt;span class=&quot;screen-reader-text&quot;&gt;Simplifying CRUD Operations with Django REST Framework Serializers and RelatedFields&lt;\/span&gt; Read More &raquo;&lt;\/a&gt;&lt;\/p&gt;&source=https:\/\/engelias.website\/blog\/simplifying-crud-operations-with-django-rest-framework-serializers-and-relatedfields-2\/\" class=\"wpr-sharing-icon wpr-sharing-linkedin-in\" title=\"\" target=\"_blank\"><i class=\"fab fa-linkedin-in\"><\/i><\/a><\/div><div class=\"elementor-grid-item\"><a href=\"https:\/\/telegram.me\/share\/url?url=https:\/\/engelias.website\/blog\/simplifying-crud-operations-with-django-rest-framework-serializers-and-relatedfields-2\/&text=Simplifying CRUD Operations with Django REST Framework Serializers and RelatedFields Programming July 25, 2023 Elias OwisSoftware Engineer Introduction: Django REST Framework (DRF) is a powerful tool for building APIs in Django applications. One of its standout features is serializers, which offer a seamless way to handle data transformation while allowing developers to focus on the &hellip;&lt;p class=&quot;read-more&quot;&gt; &lt;a class=&quot;&quot; href=&quot;https:\/\/engelias.website\/blog\/simplifying-crud-operations-with-django-rest-framework-serializers-and-relatedfields-2\/&quot;&gt; &lt;span class=&quot;screen-reader-text&quot;&gt;Simplifying CRUD Operations with Django REST Framework Serializers and RelatedFields&lt;\/span&gt; Read More &raquo;&lt;\/a&gt;&lt;\/p&gt;\" class=\"wpr-sharing-icon wpr-sharing-telegram\" title=\"\" target=\"_blank\"><i class=\"fab fa-telegram\"><\/i><\/a><\/div><div class=\"elementor-grid-item\"><a href=\"https:\/\/api.whatsapp.com\/send?text=*Simplifying CRUD Operations with Django REST Framework Serializers and RelatedFields*%0ahttps:\/\/engelias.website\/blog\/simplifying-crud-operations-with-django-rest-framework-serializers-and-relatedfields-2\/\" class=\"wpr-sharing-icon wpr-sharing-whatsapp\" title=\"\" target=\"_blank\"><i class=\"fab fa-whatsapp\"><\/i><\/a><\/div><div class=\"elementor-grid-item\"><a href=\"https:\/\/reddit.com\/submit?url=https:\/\/engelias.website\/blog\/simplifying-crud-operations-with-django-rest-framework-serializers-and-relatedfields-2\/&title=Simplifying CRUD Operations with Django REST Framework Serializers and RelatedFields\" class=\"wpr-sharing-icon wpr-sharing-reddit\" title=\"\" target=\"_blank\"><i class=\"fab fa-reddit\"><\/i><\/a><\/div><\/div>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Simplifying CRUD Operations with Django REST Framework Serializers and RelatedFields Programming July 25, 2023 Elias OwisSoftware Engineer Introduction: Django REST Framework (DRF) is a powerful tool for building APIs in Django applications. One of its standout features is serializers, which offer a seamless way to handle data transformation while allowing developers to focus on the &hellip;<\/p>\n<p class=\"read-more\"> <a class=\"\" href=\"https:\/\/engelias.website\/blog\/simplifying-crud-operations-with-django-rest-framework-serializers-and-relatedfields-2\/\"> <span class=\"screen-reader-text\">Simplifying CRUD Operations with Django REST Framework Serializers and RelatedFields<\/span> Read More &raquo;<\/a><\/p>\n","protected":false},"author":1,"featured_media":1247,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-gradient":""}},"footnotes":""},"categories":[13],"tags":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v21.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Simplifying CRUD Operations with Django REST Framework Serializers and RelatedFields - LifeOptimizeX<\/title>\n<meta name=\"description\" content=\"My experience after many months using you.com as my default search engine. you.com is a search engine more organized than other search engines\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/engelias.website\/blog\/simplifying-crud-operations-with-django-rest-framework-serializers-and-relatedfields-2\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Simplifying CRUD Operations with Django REST Framework Serializers and RelatedFields - LifeOptimizeX\" \/>\n<meta property=\"og:description\" content=\"My experience after many months using you.com as my default search engine. you.com is a search engine more organized than other search engines\" \/>\n<meta property=\"og:url\" content=\"https:\/\/engelias.website\/blog\/simplifying-crud-operations-with-django-rest-framework-serializers-and-relatedfields-2\/\" \/>\n<meta property=\"og:site_name\" content=\"LifeOptimizeX\" \/>\n<meta property=\"article:published_time\" content=\"2023-07-25T08:06:41+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-07-25T09:10:01+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/engelias.website\/blog\/wp-content\/uploads\/2023\/04\/you.com_.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1280\" \/>\n\t<meta property=\"og:image:height\" content=\"720\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Elias Owis\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:title\" content=\"Simplifying CRUD Operations with Django REST Framework Serializers and RelatedFields - LifeOptimizeX\" \/>\n<meta name=\"twitter:description\" content=\"My experience after many months using you.com as my default search engine. you.com is a search engine more organized than other search engines\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Elias Owis\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":[\"Article\",\"BlogPosting\"],\"@id\":\"https:\/\/engelias.website\/blog\/simplifying-crud-operations-with-django-rest-framework-serializers-and-relatedfields-2\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/engelias.website\/blog\/simplifying-crud-operations-with-django-rest-framework-serializers-and-relatedfields-2\/\"},\"author\":{\"name\":\"Elias Owis\",\"@id\":\"https:\/\/engelias.website\/blog\/#\/schema\/person\/a5464a1c9c2b022880b7b66b92ff4458\"},\"headline\":\"Simplifying CRUD Operations with Django REST Framework Serializers and RelatedFields\",\"datePublished\":\"2023-07-25T08:06:41+00:00\",\"dateModified\":\"2023-07-25T09:10:01+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/engelias.website\/blog\/simplifying-crud-operations-with-django-rest-framework-serializers-and-relatedfields-2\/\"},\"wordCount\":548,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/engelias.website\/blog\/#\/schema\/person\/a5464a1c9c2b022880b7b66b92ff4458\"},\"articleSection\":[\"Programming\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/engelias.website\/blog\/simplifying-crud-operations-with-django-rest-framework-serializers-and-relatedfields-2\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/engelias.website\/blog\/simplifying-crud-operations-with-django-rest-framework-serializers-and-relatedfields-2\/\",\"url\":\"https:\/\/engelias.website\/blog\/simplifying-crud-operations-with-django-rest-framework-serializers-and-relatedfields-2\/\",\"name\":\"Simplifying CRUD Operations with Django REST Framework Serializers and RelatedFields - LifeOptimizeX\",\"isPartOf\":{\"@id\":\"https:\/\/engelias.website\/blog\/#website\"},\"datePublished\":\"2023-07-25T08:06:41+00:00\",\"dateModified\":\"2023-07-25T09:10:01+00:00\",\"description\":\"My experience after many months using you.com as my default search engine. you.com is a search engine more organized than other search engines\",\"breadcrumb\":{\"@id\":\"https:\/\/engelias.website\/blog\/simplifying-crud-operations-with-django-rest-framework-serializers-and-relatedfields-2\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/engelias.website\/blog\/simplifying-crud-operations-with-django-rest-framework-serializers-and-relatedfields-2\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/engelias.website\/blog\/simplifying-crud-operations-with-django-rest-framework-serializers-and-relatedfields-2\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/engelias.website\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Simplifying CRUD Operations with Django REST Framework Serializers and RelatedFields\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/engelias.website\/blog\/#website\",\"url\":\"https:\/\/engelias.website\/blog\/\",\"name\":\"LifeOptimizeX\",\"description\":\"Creative Blog Website\",\"publisher\":{\"@id\":\"https:\/\/engelias.website\/blog\/#\/schema\/person\/a5464a1c9c2b022880b7b66b92ff4458\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/engelias.website\/blog\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/engelias.website\/blog\/#\/schema\/person\/a5464a1c9c2b022880b7b66b92ff4458\",\"name\":\"Elias Owis\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/engelias.website\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/engelias.website\/blog\/wp-content\/uploads\/2021\/07\/logo.svg\",\"contentUrl\":\"https:\/\/engelias.website\/blog\/wp-content\/uploads\/2021\/07\/logo.svg\",\"width\":1835,\"height\":1836,\"caption\":\"Elias Owis\"},\"logo\":{\"@id\":\"https:\/\/engelias.website\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Software Engineer - Full Stack Developer\",\"sameAs\":[\"https:\/\/engelias.website\/blog\",\"https:\/\/www.linkedin.com\/in\/elias-awess\/\"],\"url\":\"https:\/\/engelias.website\/blog\/author\/eliasawess\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Simplifying CRUD Operations with Django REST Framework Serializers and RelatedFields - LifeOptimizeX","description":"My experience after many months using you.com as my default search engine. you.com is a search engine more organized than other search engines","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/engelias.website\/blog\/simplifying-crud-operations-with-django-rest-framework-serializers-and-relatedfields-2\/","og_locale":"en_US","og_type":"article","og_title":"Simplifying CRUD Operations with Django REST Framework Serializers and RelatedFields - LifeOptimizeX","og_description":"My experience after many months using you.com as my default search engine. you.com is a search engine more organized than other search engines","og_url":"https:\/\/engelias.website\/blog\/simplifying-crud-operations-with-django-rest-framework-serializers-and-relatedfields-2\/","og_site_name":"LifeOptimizeX","article_published_time":"2023-07-25T08:06:41+00:00","article_modified_time":"2023-07-25T09:10:01+00:00","og_image":[{"width":1280,"height":720,"url":"https:\/\/engelias.website\/blog\/wp-content\/uploads\/2023\/04\/you.com_.png","type":"image\/png"}],"author":"Elias Owis","twitter_card":"summary_large_image","twitter_title":"Simplifying CRUD Operations with Django REST Framework Serializers and RelatedFields - LifeOptimizeX","twitter_description":"My experience after many months using you.com as my default search engine. you.com is a search engine more organized than other search engines","twitter_misc":{"Written by":"Elias Owis","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":["Article","BlogPosting"],"@id":"https:\/\/engelias.website\/blog\/simplifying-crud-operations-with-django-rest-framework-serializers-and-relatedfields-2\/#article","isPartOf":{"@id":"https:\/\/engelias.website\/blog\/simplifying-crud-operations-with-django-rest-framework-serializers-and-relatedfields-2\/"},"author":{"name":"Elias Owis","@id":"https:\/\/engelias.website\/blog\/#\/schema\/person\/a5464a1c9c2b022880b7b66b92ff4458"},"headline":"Simplifying CRUD Operations with Django REST Framework Serializers and RelatedFields","datePublished":"2023-07-25T08:06:41+00:00","dateModified":"2023-07-25T09:10:01+00:00","mainEntityOfPage":{"@id":"https:\/\/engelias.website\/blog\/simplifying-crud-operations-with-django-rest-framework-serializers-and-relatedfields-2\/"},"wordCount":548,"commentCount":0,"publisher":{"@id":"https:\/\/engelias.website\/blog\/#\/schema\/person\/a5464a1c9c2b022880b7b66b92ff4458"},"articleSection":["Programming"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/engelias.website\/blog\/simplifying-crud-operations-with-django-rest-framework-serializers-and-relatedfields-2\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/engelias.website\/blog\/simplifying-crud-operations-with-django-rest-framework-serializers-and-relatedfields-2\/","url":"https:\/\/engelias.website\/blog\/simplifying-crud-operations-with-django-rest-framework-serializers-and-relatedfields-2\/","name":"Simplifying CRUD Operations with Django REST Framework Serializers and RelatedFields - LifeOptimizeX","isPartOf":{"@id":"https:\/\/engelias.website\/blog\/#website"},"datePublished":"2023-07-25T08:06:41+00:00","dateModified":"2023-07-25T09:10:01+00:00","description":"My experience after many months using you.com as my default search engine. you.com is a search engine more organized than other search engines","breadcrumb":{"@id":"https:\/\/engelias.website\/blog\/simplifying-crud-operations-with-django-rest-framework-serializers-and-relatedfields-2\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/engelias.website\/blog\/simplifying-crud-operations-with-django-rest-framework-serializers-and-relatedfields-2\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/engelias.website\/blog\/simplifying-crud-operations-with-django-rest-framework-serializers-and-relatedfields-2\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/engelias.website\/blog\/"},{"@type":"ListItem","position":2,"name":"Simplifying CRUD Operations with Django REST Framework Serializers and RelatedFields"}]},{"@type":"WebSite","@id":"https:\/\/engelias.website\/blog\/#website","url":"https:\/\/engelias.website\/blog\/","name":"LifeOptimizeX","description":"Creative Blog Website","publisher":{"@id":"https:\/\/engelias.website\/blog\/#\/schema\/person\/a5464a1c9c2b022880b7b66b92ff4458"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/engelias.website\/blog\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/engelias.website\/blog\/#\/schema\/person\/a5464a1c9c2b022880b7b66b92ff4458","name":"Elias Owis","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/engelias.website\/blog\/#\/schema\/person\/image\/","url":"https:\/\/engelias.website\/blog\/wp-content\/uploads\/2021\/07\/logo.svg","contentUrl":"https:\/\/engelias.website\/blog\/wp-content\/uploads\/2021\/07\/logo.svg","width":1835,"height":1836,"caption":"Elias Owis"},"logo":{"@id":"https:\/\/engelias.website\/blog\/#\/schema\/person\/image\/"},"description":"Software Engineer - Full Stack Developer","sameAs":["https:\/\/engelias.website\/blog","https:\/\/www.linkedin.com\/in\/elias-awess\/"],"url":"https:\/\/engelias.website\/blog\/author\/eliasawess\/"}]}},"_links":{"self":[{"href":"https:\/\/engelias.website\/blog\/wp-json\/wp\/v2\/posts\/1252"}],"collection":[{"href":"https:\/\/engelias.website\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/engelias.website\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/engelias.website\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/engelias.website\/blog\/wp-json\/wp\/v2\/comments?post=1252"}],"version-history":[{"count":15,"href":"https:\/\/engelias.website\/blog\/wp-json\/wp\/v2\/posts\/1252\/revisions"}],"predecessor-version":[{"id":1275,"href":"https:\/\/engelias.website\/blog\/wp-json\/wp\/v2\/posts\/1252\/revisions\/1275"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/engelias.website\/blog\/wp-json\/wp\/v2\/media\/1247"}],"wp:attachment":[{"href":"https:\/\/engelias.website\/blog\/wp-json\/wp\/v2\/media?parent=1252"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/engelias.website\/blog\/wp-json\/wp\/v2\/categories?post=1252"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/engelias.website\/blog\/wp-json\/wp\/v2\/tags?post=1252"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}