Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Erro ao relacionar tabelas no django

​Boa tarde professor, tenho uma tabela Cliente e uma tabela Telefone no meu banco de dados , a PK do cliente vai como FK da tabela telefone e a combinação dessa FK junto com o número do telefone vira a chave primária da minha tabela Telefone, mas no django fica dando erro esse relacionamento, pode me ajudar?

class Cliente(User):
id_cliente = models.AutoField('ID_Cliente', primary_key=True) # Field name made lowercase.
cpf = models.CharField('CPF', unique=True, max_length=11) # Field name made lowercase.
rg = models.CharField('RG', max_length=9) # Field name made lowercase.
data_nasc = models.DateField('Data Nasc') # Field name made lowercase. Field renamed to remove unsuitable characters.
endereco = models.CharField('Endereco', max_length=50) # Field name made lowercase.
numero = models.CharField('Numero', max_length=10)
bairro = models.CharField('Bairro', max_length=45) # Field name made lowercase.
cidade = models.CharField('Cidade', max_length=45) # Field name made lowercase.
cep = models.CharField('CEP', max_length=8) # Field name made lowercase.
estado = models.CharField('Estado', max_length=45) # Field name made lowercase.
complemento = models.CharField('Complemento', max_length=45, blank=True, null=True) # Field name made lowercase.
sexo = models.CharField('Sexo', max_length=1) # Field name made lowercase



class Telefones(models.Model):
id_cliente = models.ForeignKey(Cliente, models.DO_NOTHING,'ID_Cliente', primary_key=True) # Field name made lowercase.
tel = models.CharField('TEL', max_length=12) # Field name made lowercase.

class Meta:
managed = True
db_table = 'telefones'
unique_together = (('id_cliente', 'tel'),)

def __str__(self):
return self.tel

Fica dando esse erro pra mim:

accounts.Telefones.id_cliente: Setting unique=True on a Foreignkey has the same effect as using OneToOneField.
HINT: ForeignKey(unique=True) is usually better served by OneToOneField.
1 resposta
solução!

Olá! Isso não é erro, é apenas um aviso. "HINT" em português significa dica. Ele esta dizendo o seguinte, se você disse que uma chave estrangeira é única (que não pode haver outra de mesmo valor na tabela) e diz para você usar um relacionamento OneToOneField que é mais apropriado. Faz sentido, porque relacionamentos oneToOne não podem ter a chave duplicada.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software