models.py
              from django.db import models
              from django.contrib.auth.models import AbstractUser
              
              
              class TipoSexo(models.TextChoices):
                  """
                  Aqui establecemos los tipos de sexo a elegir en los animales
                
                  """
                  Macho = "1", "Macho"
                  Hembra = "2", "Hembra"
              
              
              class User(AbstractUser):
                  """
                  Modelo custom de usuario
              
                  Creando esta clase que viene de AbstractUser permitira que esta
                  se comporta de manera idéntica al modelo de usuario predeterminado, 
                  pero podremos con los parametros desados
                  
                  """
                  foto_de_perfil = models.ImageField(
                      upload_to="profiles/", default="profiles/avatar.jpg")
                  numero_de_telefono = models.CharField(max_length=20, blank=True)
                  municipio = models.CharField(max_length=20, blank=True)
              
                  def __str__(self):
                      return self.username
              
              
              class Raza(models.Model):
                  """
                  Aqui guardaremos la raza de los animales
                  """
                  name = models.CharField(max_length=30)
              
                  def __str__(self):
                      return self.name
              
              
              class Municipio(models.Model):
                  """
                  Aqui guardaremos los municipios
                  """
                  name = models.CharField(max_length=30 )
              
                  class Meta:
                      verbose_name_plural = "Municipios"
              
                  def __str__(self):
                      return self.name
              
              
              class TipoAnimal(models.Model):
                  """
                  Aqui guardaremos el tipo de animal
                  """
                  name = models.CharField(max_length=30)
              
                  def __str__(self):
                      return self.name
              
              
              class Animal(models.Model):
                  """
                  En esta clase animal especificamos todos los campos a guardar sobre el animal
                  y las otras clases a las que hace referencia
                  """
                  user = models.ForeignKey(
                      User, on_delete=models.CASCADE, related_name="animales_usuario")
                  nombre = models.CharField(max_length=30)
                  tipo_de_animal = models.ForeignKey(
                      TipoAnimal, on_delete=models.CASCADE, related_name="tipos_animales")
                  sexo = models.CharField(max_length=10, choices=TipoSexo.choices)
              
                  imagen = models.ImageField(upload_to="animales/",
                                            default="animals/default.jpg")
                  raza = models.ForeignKey(
                      Raza, on_delete=models.CASCADE, related_name="animales")
                  municipio = models.ForeignKey(
                      Municipio, on_delete=models.CASCADE, related_name="animales_municipio")
                  observaciones = models.CharField(max_length=100, blank=True)
                  fecha_perdida = models.DateField()
              
                  def __str__(self):
                      return self.name