Como devo lidar com admin inlines para um GenericForeignKey atrás de uma relação ManyToMany?

StackOverflow https://stackoverflow.com//questions/11702770

Pergunta

Eu tenho uma Django modelo que pode ter muitos genérico de relacionamentos.Isto é conseguido através da criação manual de uma junção do modelo:

class ContentProjectContentItem(models.Model):
    content_project = models.ForeignKey('ContentProject')

    # Generic relations via Content Type Framework
    object_id = models.PositiveIntegerField()
    content_type = models.ForeignKey(ContentType)
    item = generic.GenericForeignKey('content_type', 'object_id') 

    class Meta:
        unique_together = ('content_project', 'object_id', 'content_type')
        app_label = "cms"

Que está relacionado com o modelo pai através de um ManyToManyField:

class ContentProject(models.Model):
    title = models.CharField(max_length=100)
    date_created = models.DateTimeField(auto_now_add=True)

    # Related content (Assets, Resources, Media, etc)
    content_items = models.ManyToManyField(ContentProjectContentItem)

Eu ainda estou desenvolvendo minhas habilidades usando o Django admin, então eu não tenho certeza de como criar uma linha que vai me permitem adicionar vários ContentProjectContentItems para um ContentProject.Eu tentei usar generic.GenericStackedInline, mas não adiantou:

class ContentItemInline(generic.GenericStackedInline):
    name = "content_project"
    model = ContentProjectContentItem 

class ContentProjectAdmin(MPTTModelAdmin):
    list_display = ('title' , 'date_created')
    search_fields = ('title' , 'date_created')

    inlines = [
        ContentItemInline,
    ]

Eu estou simplesmente vendo o padrão ManyToMany multi-selecione para content_items (que é o que seria de esperar).Eu não tenho certeza de como fazer ContentProjectAdmin ciente da junção da tabela genérico de relacionamentos.Quaisquer pensamentos?

Foi útil?

Solução

Acabei implementação de um personalizado change_view modelo para adicionar manualmente os elementos de formulário, e substitui o formulário de salvar método para lidar com este caso de uso.

Não se trata do melhor solução, mas eficaz, no entanto.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top