2017-12-19 29 views
0

問題があります。 FileFieldのupload_to属性を使用して、ファイルがアップロードされるディレクトリを変更しようとしています。Djangoモデルのフィールド属性のオーバーライド

主な問題は、ファイル属性を持つ親クラスを定義し、子クラスのディレクトリを変更することです。

私のモデルは、このように定義されています。

class DocumentBase(models.Model): 
    file = models.FileField(upload_to=get_filename) 


class Document(DocumentBase): 
    file_type = models.CharField(max_size=150) 

私は成功せず、子クラスでFileFieldにを上書きしようとした

Iを(私はこれが不可能であることを今知っています。)このother question(これは私の問題と非常によく似ています)の回答を成功させました。

誰か助けてもらえますか?ありがとう!

答えて

1

ウィレム氏によれば、これはupload_to属性にパッチを当てて解決することができます。しかし、このケースでは機能しませんでした。

FileField class definitionを検索すると、このクラスには別の属性:generate_filenameがあります。この属性は、upload_toが呼び出し可能なときに入力されます。 この属性は、ファイルfilenameを生成するために使用されます。

だから、働いていたソリューションでした:

class DocumentBase(models.Model): 
    file = models.FileField(upload_to=get_filename) 


class Document(DocumentBase): 
    file_type = models.CharField(max_size=150) 

Document._meta.get_field('file').generate_filename = other_get_filename 

この動作は、Djangoの1.10に変更します。

関連する問題