2017-02-07 7 views
2

のサブフォルダにWagtail文書をアップロードする可能性Amazon S3を使用してDjango-Wagtailメディアファイルを提供しているので、 "restricted"という文書を作成するカスタマイズされた文書クラスを定義する必要があります(あなたがログインしている場合のみアクセス可能)。この文書はS3バケットに「hey!」と言う特殊なアクセス権を持っています。これらのファイルは、この「foo_url」から要求されたにもかかわらず、他の場所からは要求されていない場合、「」私はこれをに限定して、制限されたURLが広がるのを防ぐように考えました。/documents/

私はそのサブフォルダをどうするかアマゾンを伝える/文書/だけのサブフォルダに格納されるように、このセキレイDocumentクラスを定義しようとしています理由です。

dummy_code_that_doesnt_work

class RestrictedDocument(Document): 
    def get_upload_to(self, filename): 
     folder_name = 'restricted' 
     filename = self.file.field.storage.get_valid_name(filename) 
     return os.path.join(folder_name, filename) 

""" 
Snippet containing restricted documents 
""" 
@register_snippet 
@python_2_unicode_compatible # provide equivalent __unicode__ and __str__ methods on Python 2 
class FooSnipet(models.Model): 

     rectricted_document_1 = models.ForeignKey(
     'RestrictedDocument', 
     null=True, 
     blank=True, 
     on_delete=models.SET_NULL, 
     related_name='+', 
    ) 
    rectricted_document_2 = models.ForeignKey(
     'RestrictedDocument', 
     null=True, 
     blank=True, 
     on_delete=models.SET_NULL, 
     related_name='+', 
    ) 
     .... 
     and many more 
     .... 

たぶん私はこのすべてを過度に複雑だとやって別の方法があります。どんな提案も大歓迎です!多くのveeeryありがとうございました:)

答えて

2

Documentモデルは画像のようにget_upload_toメソッドをサポートしていません。ドキュメントのアップロードを処理セキレイ管理者のビュー手立てのを持っていない - 私はこれはしかし、非常に役立つことはよく分からない

from wagtail.wagtaildocs.models import AbstractDocument 

class RestrictedDocument(AbstractDocument): 
    file = models.FileField(upload_to='restricted', verbose_name=_('file')) 

:しかし、ジャンゴ1.10のように、AbstractDocumentfileフィールドを上書きすることが可能ですデフォルトのDocumentクラスではなくRestrictedDocumentモデルを使用してドキュメントを保存する必要があることを認識しています。

Wagtail内のドキュメントに対する表示制限の実装は、現在進行中の作業です(https://github.com/wagtail/wagtail/pull/3245https://github.com/wagtail/wagtail/issues/1420)。

+0

ご回答いただきありがとうございます。 'Document'ではなく' AbstractDocument'から継承するように編集したいと思うかもしれません。そうでないとdjangoはクラス 'RestrictedDocument'の 'Local field"ファイル "を基底クラスDocumentから同じ名前のフィールドと衝突させます。あなたが予測したようにWagtailAdminの問題のために働かせてください。私がそれを解決することができれば、私はそれを投稿し、otherはWagtailが独自に仕事をするでしょう。とにかくありがとう! –