ユーザーがアバターをUserProfileにアップロードできるようにしようとしていますが、次のエラーが発生し続けます。
IntegrityError at /~csihar/userpic
null value in column "user_id" violates not-null constraint
DETAIL: Failing row contains (4, null, userpics/image.jpg).
...アップロードしようとするたびに最初の値が1ずつ増加します。保存する前にユーザーの現在のプロファイルを使用してフォームをインスタンス化し、モデルフォームから無関係なフィールドを除外しようとしましたが、それでも機能せず、何を見落としているのかわかりません。ただし、MEDIA_ROOT
エラーが発生する前に画像が保存されます。
models.py:
from django.contrib.auth.models import User
from django.forms import ModelForm
from django_resized import ResizedImageField
class UserProfile(models.Model):
user = models.OneToOneField(User)
userpic = ResizedImageField(max_width=100, max_height=100, upload_to='userpics/')
class UserpicUpload(ModelForm):
class Meta:
model = UserProfile
exclude = ('user','user_id')
views.py:
from django.shortcuts import render_to_response
from django.http import HttpResponseRedirect
from django.template import RequestContext
from items.models import User, UserProfile, UserpicUpload
from django.contrib.auth.decorators import login_required
@login_required
def userpic(request,list_owner):
current_user = User.objects.get(pk=request.user.id)
current_profile = current_user.get_profile()
if request.method == 'POST':
form = UserpicUpload(request.POST, request.FILES, instance=current_profile)
if form.is_valid():
newuserpic=UserProfile(userpic=request.FILES['userpic'])
newuserpic.save()
gohomeurl = "/~" + request.user.username
return HttpResponseRedirect(gohomeurl)
else:
form = UserpicUpload()
return render_to_response('userpic.html', {'listowner': list_owner, 'form':form}, RequestContext(request))
forms.py:
from django import forms
class UserpicUpload(forms.ModelForm):
userpic = forms.ImageField()
テンプレート(userpic.html):
{% extends 'base.html' %}
{% block body %}
<form action="" method="post" enctype="multipart/form-data">{% csrf_token %}
<p>{{ form.non_field_errors }}</p>
<p>{{ form.userpic.errors }}</p>
<p>{{ form.userpic }}</p>
<p><input name="submit" value="Upload" type="submit" />
</form>
{% endblock %}