1

私はモデルフォームを持っています:

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が残ります。

4

2 に答える 2