0

ImageSpecField画像のdjango-imagekitサイズ変更に使用したいので、モデルImageSpecFieldのすべてImageFieldに新しいフィールドを作成したくない、新しいクラスを作成したい、またはmodelField元の画像と画像のサムネイルを含むクラスを作成し、モデルでこの新しい modelField をインスタンス化したい画像。

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

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

それを行うための最良のアプローチは何ですか?

4

1 に答える 1

1

私の知る限り、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を使用できます。

于 2016-04-13T14:53:31.090 に答える