画像、動画、その他のメディアタイプを含むことができるPostオブジェクトがあるとします。私はそれらを一緒にリンクするためにGenericForeignKey
を使うことができます。ような何か:今DjangoのGenericForeignKeyとAdmin
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]
質問:)管理者/で、私は簡単に新しいポストを作成することができた:
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')
は今、私は簡単のように、管理インターフェイスを作成することができます。ポストには、MediaObjectを簡単に追加することができます。パネルには、タイプ(オーディオ、ビデオ、...)を選択するドロップダウンメニューがありますが、を手動で入力してください投稿とリンクしたいオブジェクトのIDを入力してください。
私はグラッペリを含むさまざまな拡張機能を試しました。いくつかは、ルックアップの機能を提供しますここにリンクするオブジェクトのID。ここではにオブジェクトを追加したいと思います。たとえば、ドロップダウンから選択した内容に応じて、AudioMedia、VideoMedia、ImageMediaを追加します。
提案がありますか?
私はそれを試したことはありませんが、管理者用のフォームを作成することはできません。このフォームは 'object_id'のデフォルトのテキストボックスを' ModelChoiceField'に置き換えますか? – karthikr