2016-04-23 5 views
2

Ich verwende derzeit Cloudinary mit Django zum Speichern von Benutzerprofilbildern und möchte Parameter übergeben, in einem Ordner speichern und das vorhandene Bild überschreiben, anstatt ein neues zu erstellen.Wie übergibt man Optionen an CloudinaryField im Django Model?

In meinem Benutzermodell:

picture = CloudinaryField('image') 

Dies als mit Django Admin und Formen erwartet funktioniert. Ich möchte nur die Fähigkeit, es im Ordner Benutzer/USERNAME/Profil zu speichern und wenn jemand ihr Bild aktualisiert, um das alte zu löschen.

+1

die Erklärung Siehe auf [Djangos Upload-Dokumentation Seite] (http://cloudinary.com/documentation/django_image_upload#django_forms_and_models), insbesondere verwendet er 'CloudinaryFileField()', das Upload-Option-Hash akzeptiert, einschließlich der Parameter 'public_id' und 'folder'. –

+0

@NadavOfir [Overriding] (http://StackOverflow.com/a/39906960/2996101) Die Methode '' 'upload_options''' stellt sicher, dass das Bild auch dann transformiert wird, wenn das Modell nicht gerendert wird. Zum Beispiel, wenn ein Skript versucht, das Bild zu speichern. – raratiru

Antwort

2

Das funktionierte perfekt:

from cloudinary.models import CloudinaryField as BaseCloudinaryField 
from django.db import models 


class CloudinaryField(BaseCloudinaryField): 
    def upload_options(self, model_instance): 
     return { 
      'public_id': model_instance.name, 
      'unique_filename': False, 
      'overwrite': True, 
      'resource_type': 'image', 
      'tags': ['map', 'market-map'], 
      'invalidate': True, 
      'quality': 'auto:eco', 
     } 

class MarketMap(models.Model): 
    name = models.CharField(max_length=17) 
    image = CloudinaryField() 
1

Sie können auch diese Art von Optionen, um das Formularfeld hinzufügen, etwa so:

image = CloudinaryFileField(
    label='My image', 
    options={ 
     'tags': "module, home", 
     'format': 'jpg', 
     'crop': 'limit', 
     'width': 640 
    }, 
    required=False)