モデルのリスト表示と編集ビューの管理ビューに画像を表示する方法はわかっています。ModelFormのパスの代わりに、djangoの新鮮なビューで画像を表示する
しかし、私はエンドユーザー用に作成した別のビューで表示する必要があります - 自分のIDの下に既存の写真や画像をさらにアップロード/削除できるようにする。
これは私が行ったコードの変更です。これは管理者のビューに最適です。私のカスタムビューではありません。
モデル定義:
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>
はしかし、最終的に私は以下のエラーを取得しています:
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
助けてください...!
あなたは関数を呼び出していますが、Djangoはmodelfieldを探しています(あなたの場合は「アップロード」されます)。私はあなたがそこで何をしたのか分からないが、それは少し古くなっていると私はあなたにそれを助けることができないが、私はあなたが望む場合、私は私の画像を表示する方法を示すcn。 – hansTheFranz
ええ、私はそれを後で見つけました。私はphoto.intanceのアップロードフィールドを使って画像を表示しました。 – athultuttu
ええ、現在の方法は私があなたに見せたいと思う方法です。 – hansTheFranz