Es tut mir leid, aber ich bin wirklich neu in Django und ich habe bereits die Schritte in der Dokumentation ausprobiert. Leider funktioniert es nicht so, wie ich es erwarten würde. Ich hatte gehofft, dass nach dem Ausführen der Schritte es die Datei in meinem Medienordner speichern würde. Wenn möglich, möchte ich auch AJAX verwenden, aber ich kann den Fluss nicht verstehen.Wie lade ich Dateien in Django hoch?
HTML
<form method="post" enctype="multipart/form-data">
{% csrf_token %}
<input type="file" name="myfile">
<button type="submit">Upload</button>
</form>
models.py
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
email = models.TextField(max_length=500, blank=True)
contact_number = models.CharField(max_length=30, blank=True)
profile_picture = models.FileField(null=True,blank=True)
@receiver(post_save, sender=User)
def create_user_profile(sender, instance, created, **kwargs):
if created:
Profile.objects.create(user=instance)
@receiver(post_save, sender=User)
def save_user_profile(sender, instance, **kwargs):
instance.profile.save()
forms.py
class UploadForm(forms.ModelForm):
class Meta:
model = Profile
fields = ('profile_picture',)
views.py
def model_form_upload(request):
if request.method == 'POST':
form = UploadForm(request.POST, request.FILES)
if form.is_valid():
form.save()
return redirect('/home/')
Ich versuche, ein Foto für das Profil eines Benutzers zu speichern. Bitte hilf mir. Wenn es eine Möglichkeit gibt, dies mit AJAX zu tun, wäre das auch hilfreich.
Wie debuggen Sie es? Machen Sie eine else (für 'form.is_valid()'), mit 'print (form.errors)', um zu überprüfen, was passiert. Ich denke, das Problem ist das name-Attribut der Input-Type-Datei, aber lass es uns überprüfen. – Rafael
Es wird kein Fehler angezeigt. Es aktualisiert nur die Seite, aber nichts geht in meinen Medienordner – Jason
Ok. Du hast gesagt, du bist neu in Django, richtig? Lassen Sie uns das Grundlegende überprüfen. Die 'print form.errors' sollten am Terminal erscheinen (und nicht im Browser). Wenn Sie Ihr Formular absenden, werden die anderen Informationen (Benutzer, E-Mail und Kontaktnummer) in der Datenbank angezeigt. – Rafael