1
resposta

Duvida sobre chaves estrangeira

Opa pessoal,

Preciso fazer o listado abaixo mas precisa ser simultaneamente pra não dar erro

class Team(models.Model):
    name = models.CharField(max_length=100, null=False)
    manager_id = models.ForeignKey(User)
    helper_id = models.ForeignKey(User)

    def __str__(self):
        return self.name


class User(models.Model):
    ROLE = (
        ("1", "Analista Júnior I"),
        ("2", "Analista Júnior II"),
        ("3", "Analista Pleno I"),
        ("4", "Analista Pleno II"),
        ("5", "Analista Sênior I"),
        ("6", "Analista Sênior II"),
    )

    name = models.CharField(max_length=100, null=False)
    email = models.CharField(max_length=100, null=False)
    password = models.CharField(max_length=500, null=False)
    user_type = models.CharField(max_length=1, null=False)
    goal = models.IntegerField()
    role = models.CharField(max_length=1, choices=ROLE)
    committee = models.CharField(max_length=1, null=False, default="N")
    inactive = models.CharField(max_length=1, null=False, default="N")
    team_id = models.ForeignKey(Team)

    def __str__(self):
        return self.name

alguem tem alguma ideia de como ajustar as FK para que funcione corretamente?

1 resposta

Olá João, como você está?

Peço desculpas pela demora em obter um retorno.

Não ficou tão claro o erro que você está obtendo e nem o objetivo em si que deseja obter ao final, todavia, te responderei com base no que pude compreender.

Caso você tenha o objetivo criar uma relação de chave estrangeira entre Team e User para que um time possua um gerente e um assistente para ambos usuários, você pode usar o campo ForeignKey em ambos os modelos. O que precisará ser feito é criar uma referência cruzada para que User possa referenciar Team e vice-versa. Para fazer isso, você pode adicionar o parâmetro related_name na sua definição de campo, como mostro abaixo:

class Team(models.Model):
    name = models.CharField(max_length=100, null=False)
    manager = models.ForeignKey(
        User, related_name='managed_teams', on_delete=models.CASCADE
    )
    helper = models.ForeignKey(
        User, related_name='helped_teams', on_delete=models.CASCADE
    )

    def __str__(self):
        return self.name


class User(models.Model):
    ROLE = (
        ("1", "Analista Júnior I"),
        ("2", "Analista Júnior II"),
        ("3", "Analista Pleno I"),
        ("4", "Analista Pleno II"),
        ("5", "Analista Sênior I"),
        ("6", "Analista Sênior II"),
    )

    name = models.CharField(max_length=100, null=False)
    email = models.CharField(max_length=100, null=False)
    password = models.CharField(max_length=500, null=False)
    user_type = models.CharField(max_length=1, null=False)
    goal = models.IntegerField()
    role = models.CharField(max_length=1, choices=ROLE)
    committee = models.CharField(max_length=1, null=False, default="N")
    inactive = models.CharField(max_length=1, null=False, default="N")
    team = models.ForeignKey(Team, on_delete=models.CASCADE, related_name='members')

    def __str__(self):
        return self.name

Todavia, vale ressaltar que como é um assunto externo ao curso e que não tenho acesso ao código e objetivo do projeto, outros testes terão de ser feitos afim de obter o resultado esperado, mas espero que esta resposta seja um bom ponto de partida para a resolução do seu problema.

Espero ter ajudado. Continue mergulhando em conhecimento!

Abraços e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!