I am having a little hard time figuring this one out. I have two custom user models, (for example: Buyer, Seller) which extends a single custom user model(CustomUser) that holds all the common fields(including `email` using which we need to filter stuff) and is an `abstract` model.

Now, we are using a third party email service to send and receive email messages from/to our application. The third party service notifies us on an event. Say, if an email was bounced or failed, they will send us a POST request on a `callback` url and after authenticating the request we update our records and make note of the which email was failed.

We have an additional email model(SentMessage) where we save a message that was sent. This model looks something like this.

```
class SentMessage(models.Model):
    subject = models.CharField(max_length=100)
    body = models.TextField()
    sender = models.ForeignKey(models.InternalUser)
    content_type = models.ForeignKey(ContentType)
    object_id = models.PositiveIntegerField()
    recipient = generic.GenericForeignKey('content_type', 'object_id')
    bounced = models.BooleanField(default=False)

```

As you can see, the `recipient` field in the above model is a `GenericForeignKey` and can be bound to any other model(In our case Buyer or Seller). This is the model where we'll be updating records if a message was bouced on a bounce event etc. I am looking to filter out the recipient with an email address provided by the third party service. So basically the flow would be something like.

--> Filter out the recipient using a given email address.(Where recipient can either be a Buyer or a Seller)
--> Using the above, filter `SentMessage` that was bounced or failed according to the type of event.

I am stuck at the first point here. How can i filter an object that either exists in `Buyer` model or in `Seller` model. I can't even do the following as `CustomUser` class is an abstract class, from which both `Buyer` and `Seller` inherit:

```
recipient = models.CustomUser.objects.get(email=bounced_email)

```

What would be the best way to find(filter) out `content_type`, `object_id`, `recipient` from a given email address?