前提・実現したいこと
以下のサイトを参考に複数の画像のアップロードをしたいのですが、
送信ボタンを押してもエラーもでず、何も起きません。
何がいけないのか全く分からず困っておりますのでご教示お願いいたします。
エラー内容
列"geom"内のNULL値はNOT NULL制約違反です
DETAIL: 失敗した行は(10, , null, image/xxxx.JPG)を含みます
HTMLのinputタグを自作から{{form}}に変更したところ、上記のエラーが発生しましたので、
geomをNOT NULLを削除したところ、複数の画像ファイルがデータベースに登録できました。
しかし画像ファイルが個別に登録されています。
個別に登録するのではなく、id1やid2のimageに入れ込みたいです。
api
1[{ 2 "id": 1, 3 "name": "xxxx", 4 "image": null, 5 "geom": { 6 "type": "Polygon", 7 "coordinates": [ 8 [[ポリゴンの緯度経度],[ポリゴンの緯度経度],...] 9 ] 10 }}, 11{ 12 "id": 2, 13 "name": "xxxx2", 14 "image": null, 15 "geom": { 16 "type": "Polygon", 17 "coordinates": [ 18 [[ポリゴンの緯度経度],[ポリゴンの緯度経度],...] 19 ] 20 }}, 21 { 22 "id": 14, 23 "name": "", 24 "image": "http://127.0.0.1:8000/media/image/xxxx.JPG", 25 "geom": null 26 }, 27 { 28 "id": 15, 29 "name": "", 30 "image": "http://127.0.0.1:8000/media/image/xxxx2.JPG", 31 "geom": null 32 }
該当のソースコード
python
1# models.py 2from django.contrib.gis.db import models 3import os 4 5def get_img_upload_path(instance, filename): 6 return os.path.join('image/',filename) 7 8class area(models.Model): 9 name = models.CharField(max_length=50) 10 image = models.ImageField('画像', upload_to=get_img_upload_path, blank=True) 11 geom = models.PolygonField(srid=4326) 12 13 def __str__(self): 14 return self.name
python
1# forms.py 2from django import forms 3from .models import area 4 5class imgForm(forms.ModelForm): 6 image = forms.ImageField( 7 widget=forms.ClearableFileInput(attrs={'multiple': True}), 8 ) 9 class Meta: 10 model = area 11 fields = ('image',)
python
1#views.py 2from .forms import imgForm 3from django import forms 4@user_passes_test(lambda u: u.is_superuser)#superuserのみアクセス可能 5def upload(request): 6 if request.method == 'POST': 7 form = imgForm(request.POST, request.FILES) 8 if form.is_valid(): 9 for ff in request.FILES.getlist('image'): 10 p = area(image=ff) 11 p.save() 12 else: 13 form = imgForm() 14 return render(request, 'map/upload.html', {'form': form})
html
1<!--upload.html--> 2<body> 3<center> 4 <form action="" method="POST" enctype="multipart/form-data" style="margin: 20px;"> 5 {% csrf_token %} 6 <p>アップロードする画像を選択して下さい。</br> 7 <同時に複数の画像を選択できます></p> 8 {{ form }}<!--修正した--> 9 <br> 10 <button id="sending" type="submit">送信</button> 11 </form> 12 13</center> 14</body> 15コード
試したこと
本当はdjangoの管理画面上で複数アップロードが出来るようにしたかったのですが、
管理画面での実施情報がなかったので、アップロード用のHTMLを作成しました。
django管理画面で実施方法も教えていただきたいです。
![
補足情報(FW/ツールのバージョンなど)
django3.0.7
python3.6
windows
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。