Como posso ter duas chaves estrangeiras para o mesmo modelo em Django?

votos
29

Quero ter duas chaves estrangeiras para o mesmo modelo:

class Test(models.model):
    example1 = models.ForeignKey(Example)
    example2 = models.ForeignKey(Example)

Eu recebo erros como:

Acessor para confrontos de campo 'example1' com campo relacionado 'Example.test_set'. Adicionar um argumento related_name à definição de 'example1'.

Publicado 12/02/2009 em 22:28
fonte usuário
Em outras línguas...                            


4 respostas

votos
93

Tente usar related_name:

class Test(models.model):
    example1 = models.ForeignKey('Example', related_name='example1')
    example2 = models.ForeignKey('Example', related_name='example2')
Respondeu 12/02/2009 em 22:35
fonte usuário

votos
17

Django usa alguma mágica python para definir relações entre os modelos, algumas das quais envolve o uso do nome dos modelos nas relações (que é onde o 'teste' em 'test__set' está vindo.) O que está acontecendo, eu acho, é que é tentando colocar "test__set" no modelo Exemplo duas vezes, uma para cada chave estrangeira que você tem definido.

A mensagem de erro sugere algo para tentar: definir um related_nameargumento (substituindo um daqueles 'test_set de) que ele pode usar em vez de dois nomes conflitantes de geração de automóveis.

Mais informações aqui : página foi removida

Página atual relativo às relações modelo: https://docs.djangoproject.com/en/2.0/ref/models/fields/#module-django.db.models.fields.related

Respondeu 12/02/2009 em 22:36
fonte usuário

votos
7

Basta fazer o que a mensagem de erro diz para fazer, e se não tiver certeza do que isso significa, consulte a documentação related_name.

Respondeu 13/02/2009 em 04:06
fonte usuário

votos
-1

No Django 2.0 Tente isto:

user = models.ForeignKey(User, on_delete=models.PROTECT, null=True,  related_name='user')
paper = models.ForeignKey(paperRecord, on_delete=models.PROTECT, null=True,  related_name='paper')
Respondeu 23/07/2018 em 20:27
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more