title: How to get the id of a current object in Django serializers?
body: <p>I have a model, <strong>'Project'</strong>. The idea is that, a user will log in and create a project. After creating, the user will work on this project at any time. Certain details will be saved to other models where I have written custom functions for it in <strong>Serializers.py</strong>. </p>
  
  <p>In order solve the idea I have, I need to retrieve the id of the current project that the user is currently working on in <strong>Serializers.py</strong>. Below is my code: </p>
  
  <p><strong>View.py</strong></p>
  
  <pre><code>class MaterialTagExcelViewSet(FilteredModelViewSet):
      queryset = MaterialTagExcel.objects.all()
      serializer_class = MaterialTagExcelSerializer
      permission_classes = (IsAuthenticated,)
      http_method_names = ('get', 'head', 'post', 'options', 'patch')
  
  </code></pre>
  
  <p><strong>Serializers.py</strong></p>
  
  <pre><code>class MaterialTagExcelSerializer(BaseSerializer):
  
      class Meta:
          fields = "__all__"
          model = MaterialTagExcel
  
      def create(self, validated_data):
          name = validated_data.get('name')  # get current material name
  
          if name is not None: 
              name_tag = MaterialTagExcel.objects.filter(name=name).first()  # filter name to check if it already exists
  
              client = self.context['request'].user.profile.client  # get current client details
  
              if name_tag is not None:  # if name exists
                  objects = MaterialExcelClient.objects.filter(client_id=client.id, name_id=name_tag.id)
  
                  if objects.count() == 0:
                      material_excel_client = MaterialExcelClient(client_id=client.id, name_id=name_tag.id)
                      material_excel_client.save()  # get current id and mat id and save to material_client_excel
                      return MaterialExcelClient.objects.filter(name_id=name_tag.id).order_by('-id')[0]
                  else:
                      return MaterialExcelClient.objects.filter(client_id=client.id, name_id=name_tag.id).first()
  
              else:
                  MaterialTagExcel.objects.create(**validated_data)
                  MaterialTagExcel.objects.all()  # save if material is new and does not exist
  
                  # return the id of this newly created material
                  obj = MaterialTagExcel.objects.filter(name=name).order_by('-id')[0]
                  # save the id of the newly created material and current client id into material_excel_client
                  material_excel_client = MaterialExcelClient(client_id=client.id, name_id=obj.id)
                  material_excel_client.save()
                  return MaterialExcelClient.objects.filter(name_id=obj.id).order_by('-id')[0]
  </code></pre>
  
  <p>From above serializer, I am able to get the client.id with the help of CurrentUserDefault. In my table user is related to profile and profile is related to client but not project. I tried to with a custom <strong>CurrentProjectDefault</strong>, but I didnt succeeded. I tried with many online sources to solve my problem. </p>
  
  <p>Is there any way to get the id of the current object from client ? 
  I am apologizing in advance if the solution to my problem is very simple.</p>
  
  <p>If you would need some more details, kindly write it in comment.</p>
  
  <p>Thanks in advance.</p>
  
  <p><strong>Models.py</strong></p>
  
  <pre><code>class MaterialTagExcel():
      name = models.CharField(max_length=255, verbose_name='name', null=False, blank=False) 
  
      def __str__(self):
          return "Material %s: %s" % (self.id, self.name)
  
      @classmethod
      def get_queryset_for_user(cls, user):
          return cls.objects.all()
  
  class Project():
      client =    models.ForeignKey(Client, related_name='projects', on_delete=models.PROTECT)
  
      name =                models.CharField(max_length=255)
  
  class ToDo(BaseModel):
      project = models.ForeignKey(Project, related_name='todos', on_delete=models.CASCADE)
      owner_client = models.ForeignKey(Client, related_name='todos', on_delete=models.CASCADE)
  
  
  
  
  </code></pre>