web-dev-qa-db-ja.com

モデルごとに複数の画像

Djangoでシンプルな不動産リストアプリを書いています。各プロパティには、可変数の画像が必要です。画像には編集可能な順序が必要です。そして、管理者をユーザープルーフにする必要があります。

つまり、私のオプションは何ですか?

  1. 私が知らないImageListフィールドはありますか?

  2. 私のために仕事をするDjango.contrib.commentsのようなアプリはありますか?

  3. 自分で作成する必要がある場合、管理者側を適切に作成するにはどうすればよいですか? ImageFieldが提供するものよりもはるかに洗練されたものを想像していますが、並べ替えにはドラッグアンドドロップがあります。しかし、私は管理ページ=(

68
Oli
  1. 多対1の関係とも呼ばれる変数リストは、通常、多対多の個別のモデルを作成し、そのモデルではForeignKeyを「1」に使用することで処理されます。

  2. Django.contribにはこのようなアプリはありませんが、使用できる外部プロジェクトがいくつかあります。 Django-photologue これは、adminで画像を表示するためのサポートさえあります。

  3. 管理サイトを「ユーザー証明」にすることはできません。信頼できるユーザーのみが使用してください。これを考えると、管理サイトを適切なものにする方法は、プロパティのModelAdminを定義し、写真をインライン化することです( インラインドキュメント )。

したがって、いくつかの簡単なドラフトを提供するには、すべてが次のようになります。

# models.py
class Property(models.Model):
    address = models.TextField()
    ...

class PropertyImage(models.Model):
    property = models.ForeignKey(Property, related_name='images')
    image = models.ImageField()

そして:

# admin.py
class PropertyImageInline(admin.TabularInline):
    model = PropertyImage
    extra = 3

class PropertyAdmin(admin.ModelAdmin):
    inlines = [ PropertyImageInline, ]

admin.site.register(Property, PropertyAdmin)

ForeignKeyでrelated_name引数を使用する理由は、クエリを読みやすくするためです。この場合、ビューで次のようなことができます。

property = Property.objects.get(pk=1)
image_list = property.images.all()

編集:言及するのを忘れて、その後、Simon Willisonのスニペットを使用して管理者にドラッグアンドドロップ順序を実装できます jQuery UIでドラッグアンドドロップを使用して順序付け可能なインライン

115
Van Gale

ForeignKeyを持つイメージモデルをプロパティモデルに記述します。おそらく、プロパティではなく画像に属する他のフィールドがいくつかあるでしょう。

5
Javier

私は現在、ほぼ同じことをしていますが、同じ問題に直面しました。

しばらく研究した後、 Django-imaging を使用することにしました。 Nice Ajax 機能があり、画像はモデルのInsertページと同じページにアップロードでき、編集可能です。不足しているのは、非JPEG拡張のサポートだけです。数日のうちに回避策を講じることができれば幸いです。 :)

3
Adrian Liem