I am very new to django and python in general, and I was trying to learn rest\_framework to create RESTful APIs.

So i have a model like this:

```
class Listing(models.Model):
    listingid           = models.BigIntegerField(primary_key=True)
    sellerid            = models.IntegerField()
    createdon           = models.DateTimeField(auto_now_add=True, editable=False)
    expirydate          = models.DateTimeField(null=True)
    validationstatus    = models.SmallIntegerField(default=0)
    listingstatus       = models.SmallIntegerField(
        choices=((0, 'Active'),
            (1, 'Hidden'),
            (2, 'Suspended'),
            (4, 'Expired'),
            (5, 'Deleted'),
            ), 
        default=0)

```

**Now i need to validate that the *expirydate* is always greater than the *createdon* date.** 

I know i can do this in the views, I guess that would not be a good idea, since now the validation only exists in the views.  

So that leaves me with the serializers and the model. 

I know I can override the `save` method to do check this like so:

```
class MasterListing(models.Model):
    # fields here..

    def save(self, *args, **kwargs):
        if self.expirydate > self.createdon:
            super().save(*args, **kwargs)
        return ValidationError("Expiry date cannot be greater than created date ("++")")

```

but I dont know if this would be a good idea, since now I am raising an error which the programmer may forget to catch. I am also not sure if the fields would be populated when this method would run.  

Another way I read about in the docs is the `clean` method which i couldn't really understand so well.

Can anyone guide me on how to handle situations like this when you are working with the rest\_framework?  

Some of the things I have read about validation till now:

1. Serializer Validation
	* Field level validation
	* Validators
2. Model Validation
	* override `clean` method
	* override `save` method
3. Just do it manually in the views

There seem to be so many options, and I might have even left a few, I could not clearly get an idea of when to use where.
I am sorry if this is a little on the beginner level, but i am new to frameworks and django seems to be very different from what i was doing in PHP. Any advice is welcome! 

Edit: I will be using django for the rest\_framework only and nothing else, since we only want to build RESTful APIs.