Como devo lidar com admin inlines para um GenericForeignKey atrás de uma relação ManyToMany?
-
13-12-2019 - |
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?
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.