Como posso definir uma relação polimórficos entre os modelos no Django?

votos
12

Eu estou trabalhando em um aplicativo de Django que contém um Offermodelo. Um Offerexemplo contém as condições de preço e aponta para uma definição do produto. O modelo do produto é realmente uma hierarquia (Eu tenho um Televisionmodelo, um Camcordermodelo, etc.). Então, eu gostaria que o Offermodelo para conter uma associação polimórfica (ou genérica) para apontar para qualquer produto.

Por enquanto, tudo o que eu encontrei é esta a usar as associações de genéricos na ContentTypesaplicação . Isso pode fazer, mas eu estou procurando alternativas, se houver.

Obrigado pela ajuda.

(Uma solução por resposta, por favor)

Publicado 06/01/2009 em 11:12
fonte usuário
Em outras línguas...                            


5 respostas

votos
4

ContentTypes é a abordagem correta. Isso ocorre porque o ForignKey só pode apontar para um tipo de mesa, de modo que você precisa para passar através de uma tabela de intermediário e fazer a sua separação, dependendo do tipo diferente.

herança Então modelo para a hierarquia de classes, mas ContentType para as chaves estrangeiras.

Respondeu 24/01/2010 em 00:27
fonte usuário

votos
3

Se você só precisa apontar a "qualquer produto", não qualquer modelo, então a solução é ter um modelo de produto que todos os produtos herdam (ou seja, Televisão e câmara de vídeo estão subclasses de produtos), e dar o seu modelo de oferta de um ForeignKey para Produtos.

Respondeu 06/01/2009 em 19:49
fonte usuário

votos
2

Você não pode fazer isso no Django. Ou use as relações genéricas ou um aplicativo de Django que adicionar esta funcionalidade como django_polymorphic .

Respondeu 03/03/2011 em 06:12
fonte usuário

votos
1

Dê uma olhada em django-polimórfica , este implementa esse recurso, e também usa ContentTypes internamente.

Respondeu 21/05/2013 em 15:31
fonte usuário

votos
-3

Você pode querer ter um olhar para a herança modelo .

Respondeu 06/01/2009 em 11:15
fonte usuário

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