Skip to content

Instantly share code, notes, and snippets.

@viniciusban
Last active July 19, 2023 10:30
Show Gist options
  • Save viniciusban/f709d055bb4b849f29dd to your computer and use it in GitHub Desktop.
Save viniciusban/f709d055bb4b849f29dd to your computer and use it in GitHub Desktop.
Django - Hierarquia de models
class VinculoGeral(models.Model):
'''Essa classe será criada pelo Django.
Ela não tem nenhuma validação.
'''
tipo_vinculo = models.ForeignKey('TipoVinculoProfissional')
profissional = models.ForeignKey('Profissional')
data_inicio = models.DateField()
data_fim = models.DateField()
matricula = models.CharField()
empresa = models.ForeignKey('Empresa')
cargo = models.ForeignKey('Cargo')
periodo_faculdade = models.CharField()
class VinculoProfissional(models.Model):
'''Essa e as filhas tem as validações, mas não são controladas pelo Django,
porque a classe de cima (VinculoGeral) já é.
'''
class Meta:
managed = False
tipo_vinculo = models.ForeignKey('TipoVinculoProfissional')
profissional = models.ForeignKey('Profissional')
data_inicio = models.DateField()
data_fim = models.DateField()
matricula = models.CharField()
def clean_data_inicio(self):
# ...
def clean_data_fim(self):
# ...
def clean_matricula(self):
# deve ser implementada nas filhas.
raise NotImplemented
def salvar(self):
# deve ser implementada nas filhas.
raise NotImplemented
class VinculoEmpregado(VinculoProfissional):
class Meta:
managed = False
cargo = models.ForeignKey('Cargo')
def clean_matricula(self):
# ...
def clean_cargo(self):
# ...
def salvar(self):
self.tipo_vinculo = TipoVinculoProfissional.objects.get_by_natural_key('empregado')
self.save()
class VinculoTerceirizado(VinculoProfissional):
class Meta:
managed = False
empresa = models.ForeignKey('Empresa')
cargo = models.ForeignKey('Cargo')
def clean_matricula(self):
# ...
def clean_cargo(self):
# ...
def clean_empresa(self):
# ...
def salvar(self):
self.tipo_vinculo = TipoVinculoProfissional.objects.get_by_natural_key('terceirizado')
self.save()
class VinculoEstagiario(VinculoProfissional):
class Meta:
managed = False
periodo_faculdade = models.CharField()
def clean_matricula(self):
# ...
def clean_periodo_faculdade(self):
# ...
def salvar(self):
self.tipo_vinculo = TipoVinculoProfissional.objects.get_by_natural_key('estagiario')
self.save()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment