我有2个模型,我允许用户单独编辑,一个叫做User(Django默认身份验证),另一个叫UserProfile。
models.py(UserProfile)
class UserProfile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
avatar = models.ImageField(upload_to='avatar', default='avatar/default.png')
header = models.ImageField(upload_to='header', default='header/default.png')
bio = models.TextField(max_length=140, blank=True)
website = models.URLField(max_length=200, blank=True)
location = models.CharField(max_length=30, blank=True)
date_birth = models.DateField(null=True, blank=True)
views.py
class UserUpdateView(generic.UpdateView):
"""
This view is for editing only the User model. /edit/
"""
model = User
slug_field = 'username'
form_class = UserForm
template_name = 'user/user_edit.html'
答案 0 :(得分:1)
首先,使用LoginRequiredMixin
mixin,以便只有登录用户才能访问该视图。
然后,覆盖get_object
方法,并返回要编辑的模型实例。
您不再需要网址中的用户名,因此您可以删除slug_field = 'username'
。
from django.contrib.auth.mixins import LoginRequiredMixin
class UserUpdateView(LoginRequiredMixin, generic.UpdateView):
model = User
form_class = UserForm
template_name = 'user/user_edit.html'
def get_object(self):
return self.request.user
如果您有类似的视图来编辑用户个人资料,则会返回self.request.user.userprofile
。