2016-04-13 10 views
0

ImageSpecFielddjango-imagekitを画像のサイズ変更に使用したいので、私のモデルではImageFieldのフィールドごとに新しいImageSpecFieldフィールドを作成する必要はありません。元の画像と画像のサムネイルを含む新しいクラスまたはmodelFieldを作成し、この新しいmodelFieldを画像のモデルにインスタンス化します。モデルにフィールドを動的に追加する(または別のクラスにいくつかのフィールドを格納する)

たとえば、モデルにprofile_pictureフィールドがある場合は、profile_pictureprofile_picture_thumbnailの両方のフィールドが必要です。モデルにavatarのフィールドがある場合avataravatar_thumbnail

モデル用にこれらのフィールドを動的に生成する方法はありますか?

これを行うにはどのような方法が最適ですか?

答えて

0

私が知る限り、フィールドを動的にDjangoモデルに注入するのは簡単な作業ではありません。あなたが試してみたい場合、これはあなたの出発点になることができます。

同様の投稿がここにあります。基本的にこれらのフィールドを作成する機能を付ける http://www.sixpearls.com/blog/2013/feb/django-class_prepared-signal/

from django.db.models.signals import class_prepared 
def add_image_fields(sender, **kwargs): 
    """ 
    class_prepared signal handler that checks for the model massmedia.Image 
    and adds sized image fields 
    """ 
    if sender.__name__ == "Image" and sender._meta.app_label == 'massmedia': 
     large = models.ImageField(upload_to=".", blank=True, verbose_name=_('large image file')) 
     medium = models.ImageField(upload_to=".", blank=True, verbose_name=_('medium image file')) 
     small = models.ImageField(upload_to=".", blank=True, verbose_name=_('small image file')) 

     large.contribute_to_class(sender, "large") 
     medium.contribute_to_class(sender, "medium") 
     small.contribute_to_class(sender, "small") 

class_prepared.connect(add_image_fields) 

あなたはclass_prepared信号をキャッチし、画像フィールドは、その後、

は、すべてのフィールドを取得するには、クラスのimage_field_thumbnailに貢献するモデルに属している場合、すべてのフィールドを、一覧表示することができ、あなたが使用することができますget_fields

関連する問題