Skip to content

Instantly share code, notes, and snippets.

@tomleo
Created January 30, 2020 17:58

Revisions

  1. tomleo created this gist Jan 30, 2020.
    40 changes: 40 additions & 0 deletions db_constraint_example.py
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,40 @@
    class Foo(models.Model):


    def object_validation(
    cls, some_values
    ) -> Optional[str]:
    """
    Validation logic when creating a Foo record
    If creation is via a model serializer's is_valid method this function
    will get triggered via the clean method.
    If creation is not via a model serializer's is_valid method this
    function will get triggered via the save method.
    """
    if not some_value == "somethong":
    return FOO_ERROR_MSG_SOMETHING_GOES_HERE
    return None

    def clean(self):
    """
    `is_valid` calls on model serializers should trigger this validation prior to saving
    """
    error_msg = self.content_object_validation(
    some_value
    )
    if error_msg:
    raise ValidationError(error_msg)

    def save(self, *args, **kwargs):
    """
    Ensure new objects are valid prior to save.
    """
    if not self.id:
    error_msg = self.content_object_validation(
    some_value
    )
    if error_msg:
    raise IntegrityError(error_msg)
    super().save(*args, **kwargs)