画像、動画、その他のメディア タイプを含むことができる Post オブジェクトがあるとします。a を使用しGenericForeignKey
てそれらをリンクできます。何かのようなもの:
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')
これで、次のような管理インターフェイスを簡単に作成できます。
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]
ここで質問です:) admin/ では、新しい投稿を簡単に作成できます。投稿には、MediaObject を簡単に追加できます。パネルには、タイプ (オーディオ、ビデオなど) を選択するためのドロップダウン メニューがありますが、Post にリンクするオブジェクトの IDを手動で入力する必要があります。
grappelli を含むさまざまな拡張機能を試しました。ここにリンクするオブジェクトの IDを検索する機能を提供するものもあります。ここにオブジェクトを追加する機能が必要です。たとえば、ドロップダウンから選択したものに応じて、AudioMedia、VideoMedia、ImageMedia を追加します。
助言がありますか?