inlines genéricos de administração para modelos subclasse multi-mesa quebrada --- alguma alternativa?

votos
2

Aqui está o que eu estou tentando fazer, e não ...

Eu tenho um modelo de arquivo que tem um genérico-relação a outros objetos:

class File(models.Model):
    content_type = models.ForeignKey(ContentType)
    object_id = models.PositiveIntegerField()
    content_object = generic.GenericForeignKey()
    file = models.FileField(upload_to='files/%Y/%m/%d')
    # etc....

Eu também quero ter uma sub-classe de arquivo para lidar com o caso específico de imagens a ser exibidas em páginas, em vez de baixado:

class Image(File):
    file = models.ImageField(upload_to='files/%Y/%m/%d')

Todos os itens acima funciona bem, incluindo inlines genéricas do modelo de arquivo, até que eu quiser usar um genérico-inline do modelo Imagem --- o processo de salvar não consegue criar a instância da classe base e por isso levanta um erro informando que a imagem .file_ptr (o 'segredo' chave estrangeira para a classe base) não pode haver nenhum.

Então, basicamente, inlines genéricos não suportam adequadamente herança multi-mesa no momento.

É muito provável que eu estou fazendo isso mais complicado do que o necessário, para que qualquer pessoa pode sugerir ou uma correção para este problema, ou uma melhor maneira de alcançar o mesmo fim?

Por favor, deixe-me saber se você precisar de mais esclarecimentos.

Publicado 22/11/2008 em 13:43
fonte usuário
Em outras línguas...                            


1 respostas

votos
0

A herança pode ser implementado de duas maneiras em um modelo relacional.

Uma subclasse pode ser uma nova tabela com as mesmas colunas como a superclasse repetido. Isso funciona bem quando você tem uma superclasse ou subclasse abstratas recursos que substituem a superclasse.

Uma subclasse pode ser apenas as colunas exclusivas com uma junção com a tabela da superclasse. Isso funciona bem quando você tem uma superclasse concreta.

No seu caso, parece que você pode ter o seguinte.

class FileFacts( models.Model ):
    content_type = models.ForeignKey(ContentType)
    object_id = models.PositiveIntegerField()
    content_object = generic.GenericForeignKey()

class DownloadFile( models.Model ):
    facts = models.ForeignKey( FileFacts )
    file = models.FileField(upload_to='files/%Y/%m/%d')

class InlineImage( models.Model ):
    facts = models.ForeignKey( FileFacts )
    file = models.ImageField(upload_to='files/%Y/%m/%d')

Esta é a minha preferência para o tratamento de um modelo subclasse-like.

Respondeu 22/11/2008 em 14:30
fonte usuário

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