2016-04-13 6 views
0

I ImageSpecField von django-imagekit zum Ändern der Größe Bild verwenden möchten, so will ich nicht ein neues ImageSpecField Feld für jeden ImageField in meine Modelle schaffen, ich will Erstellen Sie eine neue Klasse oder modelField, die Originalbild und Bildminiatur enthält und dieses neue ModelField in meinen Modellen für Bilder instanziiert.dynamisch Felder hinzufügen zu modellieren (oder einige Felder in einer separaten Klasse speichern)

Zum Beispiel, wenn mein Modell profile_picture Feld hat, möchte ich sowohl profile_picture als auch profile_picture_thumbnail haben. Wenn mein Modell avatar hat, möchte ich sowohl avatar als auch avatar_thumbnail haben

Also gibt es eine Möglichkeit, diese Felder für Modelle dynamisch zu generieren?

Was ist der beste Ansatz, um das zu tun?

Antwort

0

Soweit ich weiß, ist das dynamische Injizieren von Feldern in ein Django-Modell keine leichte Aufgabe. Wenn Sie es versuchen möchten, kann dies ein Ausgangspunkt für Sie sein.

Ähnliche Beiträge finden Sie hier. 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) 

, die im Grunde eine Funktion anhängen, um diese Felder zu erstellen.

können Sie class_prepared Signal fangen und alle Felder auflisten, wenn ihr ein Bildfeld, dann in die Klasse beitragen image_field_thumbnail

alle Felder gehört zu einem Modell zu erhalten, können Sie get_fields

Verwandte Themen