1

Ich arbeite an einem Django-Projekt, wo Benutzer Bilder hochladen können unter Verwendung Dropzone.js Im Moment Benutzer Bilder würden unter mypp/Bilder Ordner gespeichert werden Allerdings möchte ich den Pfad der hochgeladenen Bilder dynamisch speichern. Zum Beispiel /images//image1.jpg Btw Ich verwende django-registraion-redux Paket (v 1.1), um meine Benutzerregistrierung & Login zu behandeln. Das sind meine Codes:Wie lade ich mehrere Bilder in Django mit Dropzone hoch und speichere den Pfad dynamisch?

models.py

from django.db import models 
from django.contrib.auth.models import User 

get_user_image_folder(instance, filename): 
return "%s/%s" % (instance.user.user.username, filename) 

class Picture(models.Model): 
user = models.ForeignKey(User, null=True) 
image = models.ImageField(upload_to=get_user_image_folder,) 

foms.py

class PictureForm(forms.ModelForm): 
class Meta: 
    model = Picture 
    fields = ('image',) 

views.py

def upload_picture(request): 
if request.method == 'POST': 
    form = PictureForm(request.POST, request.FILES) 

    if form.is_valid(): 
     picture = form.save() 
else: 
    form = PictureForm() 
return render(request, "upload_picture.html", locals()) 

Vorlage

<body> 
    <form action="{% url 'upload_picture' %}" class="dropzone" id="myDropzone" method='POST' enctype="multipart/form-data"> 
     {% csrf_token %} 

     <div class="fallback"> 
      <input name="file" type="file" multiple /> 
     </div> 
    </form> 

    <script src="{% static 'dropzone/dropzone.js' %}"></script> 
    <script type="text/javascript"> 
     Dropzone.options.myDropzone ={ 
      paramName: "image", // name of input 
      autoProcessQueue : true, 
      parallelUploads: 1, 

      init : function(){ 
       this.on("success", function(file, responseText){ 
        // event launched at the end of uploading images queued 
        console.log(responseText); 
       }); 
      } 
     }; 
    </script> 
</body> 

urls.py

urlpatterns = [url(r'^upload-picture/', 'myapp.views.upload_picture', name='upload_picture'),]+ static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) 

settings.py

MEDIA_ROOT = 'C:/Users/mhsha/Desktop/board' 
MEDIA_URL = '/media/' 

jetzt Recht, wenn ich versuche, ein Bild, das ich den Fehler zu laden: AttributeError bei/upload-pictur e/'Bild' Objekt hat kein Attribut 'Benutzer' jeder Vorschlag wäre willkommen!

Antwort

1

In Models.py:

Sie haben: instance.user.user.username. Da ist ein extra .user. Es sollte in etwa so aussehen:

def get_user_image_folder(instance, filename): 
return 'images/{0}/{1}'.format(instance.user.username, filename) 

class Picture(models.Model): 
user = models.ForeignKey(User) 
image = models.ImageField(upload_to = get_user_image_folder) 

Dies sollte funktionieren.

+0

omg ty so viel Rooz ich, dass für einen Tag festsaß = _ = das Problem nun behoben ist – malfered

1

Verwendung image = models.ImageField (upload_to = "/ media /")