1
djangoフォームとクラスベースのビューを使用してuserprofileインスタンスを更新できません。 POSTリクエストは適切なパラメータで送信され、テンプレートは適切にリダイレクトされますが、残念ながらuserprofileは更新されません。クラスベースのビューとdjangoフォームを使用してデータを更新できません
私はDjangoを初めて使っているので、すべてのヒントを歓迎します。
models.py:
class UserProfile(models.Model):
objects = models.Manager()
user = models.OneToOneField(User)
search_range = models.IntegerField(default=150)
def __str__(self):
return self.user.username
forms.py:
class HomeForm(forms.ModelForm):
class Meta:
model = UserProfile
fields = ('search_range',)
views.py:
class HomeView(TemplateView):
template_name = 'home/home.html'
def get(self, request):
form = HomeForm()
args = {'form': form}
return render(request, self.template_name, args)
def post(self, request):
form = HomeForm(request.POST, instance=request.user.userprofile)
if form.is_valid():
form.save()
return redirect('home:home')
args = {'form': form}
return render(request, self.template_name, args)
urls.py:
urlpatterns = [
url(r'^$', HomeView.as_view(), name='home')
]
はhome.html:
<form method="post">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">Submit</button>
</form>
コードが正しいように見えます。ユーザープロファイルが更新されていないことをどのように確認しましたか?あなたはデータベースで直接チェックしたのですか?また、ディスプレイの問題かもしれません。たとえば、 'instance'キーワード引数をフォームに' get'アクションで渡さないでください。だから、 'search_range'にはデフォルト値(' 150')があらかじめ設定されていると思います。 –
@AntoinePinsardそうです、それはディスプレイの問題でした。私はデータがデータベースで正しく更新されていることに気付かなかった。 getメソッドのフォームにインスタンスを渡すことで問題が解決されました。どうもありがとうございました! –