1

ユーザーが管理インターフェイスを介して写真をアップロードし、API エンドポイントを介してそれらの画像の URL にアクセスできるようにする Django アプリを作成しています。管理インターフェイスで、ユーザーに Filepicker.io ウィジェットを表示し (ドラッグ アンド ドロップ機能などを有効にするため)、ファイルを S3 にアップロードする必要があります。アカウントの Filpicker 管理ページに S3 資格情報を既に入力しています。

私の質問は、これらすべての要素をどのようにまとめるかです。ここに私のプロジェクトからの適切なファイル:

# models.py
from django.db import models
from django_filepicker.models import FPFileField

# Add field introspection for FPFileField 
# See http://south.aeracode.org/wiki/MyFieldsDontWork
from south.modelsinspector import add_introspection_rules
add_introspection_rules([], ["^django_filepicker\.models\.FPFileField"])

class Product(models.Model):
    product_logo = FPFileField(upload_to='uploads')

# forms.py
from django import forms
from django_filepicker.forms import FPFileField
from django_filepicker.widgets import FPFileWidget
from example.models import Product

class ProductForm(forms.ModelForm):
    class Meta:
        model = Product

    def __init__(self, *args, **kwargs):
        self.fields['product_logo'] = FPFileField(widget = FPFileWidget)
        super(ProductForm, self).__init__(*args, **kwargs)

# views.py
from django.http import HttpResponse
from example.models import Product
import json

def example_view():
    result = []
    products = Product.objects.all()
    for product in products:
        # I want the S3 URL here!
        result.append(product.product_logo.url)
    return HttpResponse(json.dumps(result, indent=2))

私の問題は次のとおりです。

  1. Django 管理インターフェイスには通常の Django FileField ウィジェットが表示されますが、代わりに FPFileWidget が必要です
  2. 画像ファイルを S3 にアップロードしたい (自分のサイトの /media ディレクトリではなく)
  3. /media/xxxx URL ではなく、S3 URL を取得したいと考えています。

たとえば、現在の一般的な応答は次のとおりです。

[
  "/media/uploads/fp-file", 
  "/media/uploads/fp-file_1", 
  "/media/uploads/fp-file_2", 
  "/media/uploads/fp-file_3", 
  "/media/uploads/fp-file_4", 
  "/media/uploads/fp-file_5"
]

しかし、私は次のようなものが欲しい:

[
  "https://s3-ap-southeast-2.amazonaws.com/XXXXXXXXX/TBtOcRSNyBAZZuNBFOpA_blah.png", 
  "https://s3-ap-southeast-2.amazonaws.com/XXXXXXXXX/8ODleDuKRIOAglFs0sKl_etc.png", 
]

4

2 に答える 2

3

ストレージ バックエンドに変更DEFAULT_STORAGE_BACKENDする必要があります。の amazon-S3 バックエンドをs3ご覧ください。django-storages

管理パネルで使用するには、 Django Admin: Using a custom widget for only one model fieldFPFileWidgetをご覧ください。

これら 2 つの設定を変更すると、うまくいくはずです。

于 2013-01-23T07:58:26.743 に答える
1

FPUrlField を見てください。必要なものが得られるはずです。現在の FP*Fields には管理インターフェイスがありませんが、コードを提供したい場合はプル リクエストを受け付けます。

于 2013-01-23T18:30:12.723 に答える