Ich kenne die Möglichkeit, Bild in Admin-Ansichten für eine Modellliste anzeigen und Bearbeitungsansicht anzuzeigen.Anzeige Bild anstelle von Pfad in ModelForm in einer neuen Ansicht in Django
Aber ich brauche das Bild in einer anderen Ansicht, die ich für Endbenutzer erstellt habe - um mehr/vorhandene Fotos/Bilder unter seiner ID hochladen zu können.
Dies sind die Codeänderungen, die ich vorgenommen habe. Es funktioniert perfekt für Admin-Ansichten; aber nicht für meine benutzerdefinierten Ansichten.
Modell Definition:
class Photo(models.Model):
artist = models.ForeignKey(Artist, on_delete=models.CASCADE)
upload = models.ImageField(upload_to=user_directory_path)
stars = models.FloatField(default=0)
def __str__(self):
# return self.artist.last_name+','+self.artist.first_name
return mark_safe('<img src="%s" style="width:100px;" />' % self.upload.url)
def image_img(self):
if self.upload:
return mark_safe('<img src="%s" style="width:100px;"/>' % self.upload.url)
else:
return '(Sin imagen)'
image_img.short_description = 'Thumb'
image_img.allow_tags = True
Views.py:
class PhotosetForm(ModelForm):
class Meta:
model = Photo
fields = ('upload', 'image_img')
readonly_fields = ('image_img')
exclude = ['artist', 'stars']
def photoset_update(request, pk, template_name='portfolios/photoset_form.html'):
this_artist = get_object_or_404(Artist, pk=pk)
PhotoInlineFormset = inlineformset_factory(Artist, Photo, fields=('upload',))
photoset = PhotoInlineFormset(request.POST or None, request.FILES or None, instance=this_artist)
if photoset.is_valid():
photoset.save()
return redirect('portfolios:index')
return render(request, template_name, {'formset':photoset,})
form.html:
<form method="post" class="form-horizontal artist_form" enctype='multipart/form-data'>{% csrf_token %}
<div class="row">
{{ formset.management_form }}
{% for photo in formset %}
<div class="well">
{{ photo }}
</div>
{% endfor %}
</div>
<input type="submit" class="btn btn-primary btn-block" value="Save" />
</form>
Aber am Ende bin ich immer die folgenden Fehler:
from . import views
File "C:\Users\babya\OneDrive - Hewlett Packard Enterprise\PycharmProjects3x\M
odelsCompany\djangoproject\portfolios\views.py", line 96, in <module>
class PhotosetForm(ModelForm):
File "C:\Users\babya\OneDrive - Hewlett Packard Enterprise\PycharmProjects3x\M
odelsCompany\djangoproject_env\lib\site-packages\django\forms\models.py", line 2
62, in __new__
raise FieldError(message)
django.core.exceptions.FieldError: Unknown field(s) (image_img) specified for Ph
oto
Bitte helfen ..!
Sie rufen eine Funktion, aber Django sucht nach einem Modellfeld (in Ihrem Fall wäre es "upload"). Ich bin mir nicht sicher, was du da gemacht hast, es scheint ein bisschen veraltet zu sein und ich kann dir nicht helfen, aber ich kann dir zeigen, wie ich meine Bilder zeige, wenn du willst. – hansTheFranz
Ja, ich habe es später herausgefunden. Ich habe das Upload-Feld von Photo.intance benutzt, um das Bild anzuzeigen. – athultuttu
yeah der aktuelle Weg ist der Weg, den ich dir zeigen wollte. – hansTheFranz