No Django, como você pode mudar a classe de usuário para trabalhar com uma tabela db diferente?

votos
1

Nós estamos correndo Django ao lado - e compartilhar um banco de dados com - um aplicativo existente. E nós queremos usar uma tabela existente user (não Django própria) para armazenar informações de usuário.

Parece que é possível mudar o nome da tabela que o Django usa, na classe Meta da definição do usuário.

Mas nós preferimos não mudar o núcleo Django em si.

Então, nós estávamos pensando que podíamos sub-classe da classe auth.User núcleo como este:

class OurUser(User) :
    objects = UserManager()
    class Meta:
        db_table = u'our_user_table'

Aqui, o objetivo é não adicionar quaisquer campos adicionais para a classe de usuário personalizada. Mas apenas para usar a tabela alternativa.

No entanto, esta falha (provavelmente porque o ORM está assumindo que o our_user_table deve ter uma chave externa referindo volta para a mesa do usuário original, o que não acontece).

Então, é desta forma sensata a fazer o que queremos fazer? Eu perdi para fora em alguma maneira mais fácil para mapear as classes para tabelas? Ou, se não, isso pode ser feito para trabalhar?

update:

Eu acho que eu poderia ser capaz de fazer a mudança que eu quero apenas monkey-patching o _meta de usuário em um local_settings.py

User._meta.db_table = 'our_user_table'

Alguém pode pensar em qualquer coisa ruim que poderia acontecer se eu fizer isso? (Particularmente no contexto de um aplicativo bastante típico Django / Pinax?)

Publicado 15/05/2009 em 00:41
fonte usuário
Em outras línguas...                            


1 respostas

votos
6

Você pode achar que é útil para configurar sua tabela antiga como uma fonte de autenticação alternativa e contornar todas estas questões.

Outra opção é a subclasse o usuário e têm o ponto subclasse para o usuário-modelo. Substituir a função poupar para garantir que tudo que você precisa fazer para preservar a sua funcionalidade de idade está lá.

Eu não fiz qualquer um destes mim, mas espero que eles são ponteiros úteis.

Atualizar O que quero dizer com autenticação alternativa, neste caso, é um pequeno script Python que diz "Sim, este é um nome de usuário / senha válida" - Em seguida, ele cria uma instância do modelo na tabela Django padrão, copia áreas em todo da tabela de legado e retorna o novo usuário para o chamador.

Se você precisa manter as duas tabelas em sincronia, você pode decidir a ter sua autenticação alternativa não criar um usuário Django padrão e apenas dizer "Sim, esta é uma senha válida e username"

Respondeu 15/05/2009 em 00:50
fonte usuário

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