Adicionar um campo a um modelo de Django existente

votos
51

Eu tenho um pequeno site com alguns usuários e eu gostaria de adicionar um campo a um de meus modelos (e, portanto, tabelas.) O problema é que syncdb, obviamente, não vai tocar os modelos existentes e eu estou tentando descobrir como adicionar esse campo para modelo / tabela sem ter para repovoar a coisa toda.

Exemplo:

class Newspaper(models.Model):
    name = models.CharField()

class UserProfile(models.Model):
    user = models.ForeignKey(user, unique=True)
    reads = models.ManyToManyField(Newspaper)

Agora eu gostaria de adicionar um campo URL ( blank=True) para o Newspapermodelo sem quebrar os perfis de usuário.

Alguma ideia?

Publicado 06/05/2009 em 16:18
fonte usuário
Em outras línguas...                            


3 respostas

votos
38

Não há nenhuma maneira interna para fazer isso. No entanto, há uma série de projetos de terceiros que vai fazer isso por você. Os dois principais são chamados Sul e django-evolution , embora existam vários outros também (incluindo um que eu estive envolvido com, dmigrations).

Eu recomendaria definitivamente Sul - tem uma série de características realmente puro e funciona muito bem.

Respondeu 12/05/2009 em 20:28
fonte usuário

votos
18

Você poderia tentar obter o SQL para o seu novo campo usando:

manage.py sql appname

Onde appnameé o nome do aplicativo no qual sua classe jornal vive.

Em seguida, você pode adicionar manualmente um campo para o seu appname_newspapertabela, usando ALTER TABLE. Eu não estou ciente de uma maneira de fazer isso diretamente com Django, já que Django não suporta migrações.

Respondeu 06/05/2009 em 16:31
fonte usuário

votos
1

2015 resposta:

Execute o seguinte:

python manage.py makemigrations
python manage.py migrate
Respondeu 29/11/2015 em 14:52
fonte usuário

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