私はモデルフォームを持っています:
class UploadForm(forms.ModelForm):
class Meta:
model = Image
fields = ['image']
これはモデルに基づいていますImage
class Image(models.Model):
def content_file_name(instance, filename):
return filename
name = models.CharField(max_length=50)
image = models.ImageField(upload_to=content_file_name)
user = models.ForeignKey(MyUser, related_name='image')
views.py では、アップロードされた画像とともに、画像名とユーザー オブジェクト (セッションから) をデータベースに保存しようとしています。
form1 = UploadForm(request.POST, request.FILES)
if form1.is_valid():
image = request.FILES['image'] # image is of UploadedFile class
form1.Meta.model.name = image.name
form1.Meta.model.user = get_object_or_404(MyUser,username=request.session['user'])
form1.save()
return render(request, '16_upload01.html', context)
問題は、アップロードされた画像のみが保存されることです。ブラウザのエラー メッセージ:
/competition-big/big1/upload comp_app_image.user_id の IntegrityError は NULL にできない
SQLコマンドをチェックしてこれを確認しました:
INSERT INTO "comp_app_image" ("name", "image", "user_id") VALUES ('', 'grey-160-100_1.png', None)
イメージ名とユーザーは にバインドされていないとform1
思います。しかし、どうすればそれを達成できますか?
編集
掘り下げた後、上記のコードを台無しにしたことがわかりました。今、私は自分のコードを次のように変更しました:
if form1.is_valid():
form1.cleaned_data['user'] = get_object_or_404(MyUser, username=request.session['user'])
form1.save()
しかし、私はまだnull user_id
エラーが発生します。
EDIT 2
ジャシンダに感謝します。今、私はこのよりクリーンなコードを取得します:
if form1.is_valid():
form1.cleaned_data['user'] = request.user
form1.save()
しかし、エラーnull user_id
が残ります。