site admin do Django não exibir relação ManyToManyField

votos
3

Eu estou trabalhando no que eu acho que é um site de Django bastante normal, mas estou tendo problemas para obter o meu seção de administração para exibir os campos apropriados.

Aqui é o meu models.py:

class Tech(models.Model):
    name = models.CharField(max_length = 30)

class Project(models.Model):
    title = models.CharField(max_length = 50)
    techs = models.ManyToManyField(Tech)

Em outras palavras, um projeto pode ter diferentes objetos tecnologia e diferentes objetos tecnologia podem pertencer a diferentes Projetos (Project X foi criado com Python e Django, Projeto Y foi C # e SQL Server)

No entanto, o site de administração não exibe qualquer UI para os objetos tecnologia. Aqui está a minha admin.py:

class TechInline(admin.TabularInline):
    model = Tech
    extra = 5

class ProjectAdmin(admin.ModelAdmin):
    fields = ['title']
    inlines = []
    list_display = ('title')

admin.site.register(Project, ProjectAdmin)

Eu tentei adicionar a TechInlineclasse para a inlineslista, mas que provoca uma

<class 'home.projects.models.Tech'> has no ForeignKey to <class 'home.projects.models.Project'>

Erro. Também tentei adicionar techsà fieldslista, mas que dá um

nenhuma tabela: projects_project_techs

Erro. I verificada, e não há projects_project_techsmesa, mas há um projects_techum. Alguma coisa talvez se ferrar na minha syncdb?

Eu estou usando SQLite como meu banco de dados se isso ajuda.

Publicado 02/10/2008 em 05:43
fonte usuário
Em outras línguas...                            


3 respostas

votos
2

Eu tentei adicionar a classe Techinline à lista inlines, mas que provoca uma

'Techinline' não definido

Isso é um copy-paste em linha reta? Parece que você acabou de fazer um erro de digitação - tentar TechInlineem vez de TechInLine.

Se o seu syncdb não criar a tabela adequada, você pode fazê-lo manualmente. Executar este comando:

python manage.py sqlreset <myapp>

E olhe para a definição para a projects_project_techsmesa. Copie e cole-o no cliente para o seu banco de dados.

Respondeu 02/10/2008 em 05:48
fonte usuário

votos
0

@ John Millikin - Obrigado pela dica sqlreset, que me colocou no caminho certo. O sqlreset gerado código que me mostrou que o projects_project_techsnunca foi realmente criado. I terminou apenas apagar meu banco de dados deb.db e regenerá-la. techsem seguida, mostrou-se como deveria.

E, assim como uma nota, eu tinha que fazer um admin.site.register(Tech)para ser capaz de criar novas instâncias da classe da página do projeto também.

Eu provavelmente vou postar uma outra pergunta para ver se existe uma maneira melhor para implementar mudanças no modelo (desde que eu tenho certeza que é o que causou meu problema) sem limpar o banco de dados.

Respondeu 02/10/2008 em 16:17
fonte usuário

votos
0

Assumindo que o seu aplicativo é chamado de "projetos", o nome padrão para a sua mesa techs será projects_tech ea tabela de projetos será projects_project.

O muitos-para-muitos tabela deve ser algo como projects_project_techs

Respondeu 02/10/2008 em 10:27
fonte usuário

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