Diciamo che ho un oggetto Post che può contenere immagini, video e altri tipi di media. Posso usare un GenericForeignKey
per collegarli insieme. Qualcosa di simile:GenericForeignKey e Admin in Django
class Post(models.Model):
title = models.CharField(...)
text = models.TextField(...)
class AudioMedia(models.Model):
...
class VideoMedia(models.Model):
...
class ImageMedia(models.Model):
...
class MediaObject(models.Model):
post = models.ForeignKey(Post)
order = models.IntegerField()
content_type_media = models.ForeignKey(
ContentType, limit_choices_to={
'model__in': (
'audiomedia',
'imagemedia',
'videomedia')
})
object_id_media = models.PositiveIntegerField()
obj = generic.GenericForeignKey('content_type_media', 'object_id_media')
Ora posso facilmente creare un'interfaccia di amministrazione, come:
class MediaObjectAdminInLine(admin.StackedInline):
model = MediaObject
ct_field = "content_type_media"
ct_fk_field = "object_id_media"
extra = 0
class PostAdmin(admin.ModelAdmin):
inlines = [MediaObjectAdminInLine]
Ora la domanda :) In admin /, posso facilmente creare un nuovo post. Per il post, posso facilmente aggiungere più MediaObject. Nel pannello, ho un menu a discesa per scegliere il tipo (audio, video, ...), ma devo manualmente inserire l'ID dell'oggetto che voglio collegare con Post.
Ho provato varie estensioni, tra cui grappelli. Alcuni forniscono la possibilità di cercare l'ID degli oggetti da collegare qui. Voglio la possibilità di aggiungere oggetti qui, ad esempio, aggiungere un AudioMedia, un VideoMedia, un ImageMedia, a seconda di ciò che seleziono dal menu a discesa.
Qualche suggerimento?
Non l'ho provato, ma un pensiero - non si può avere un modulo di amministrazione, e il modulo sovrascrive la casella di testo predefinita per 'object_id' per essere un' ModelChoiceField'? – karthikr