【发布时间】:2017-07-27 14:10:54
【问题描述】:
我无法使用 django 表单和基于类的视图来更新用户配置文件实例。 POST 请求使用正确的参数发送,模板正确重定向,但不幸的是用户配置文件没有更新。
请注意,我是 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 方法形式传递实例解决了这个问题。非常感谢!
标签: python django django-forms django-views