【发布时间】:2023-03-22 08:31:01
【问题描述】:
我正在以这种方式扩展默认用户模型
models.py
from django.db import models
from django.contrib.auth.models import User
class Profile(User):
city = models.CharField(max_length = 60)
company = models.CharField(max_length = 100)
def __str__(self):
return self.username
我正在使用以下视图注册用户。
class ProfileFormView(View):
form_class = UserForm
template_name = 'register.html'
# Display empty form
def get(self, request):
form = self.form_class(None)
return render(request, self.template_name, {'form': form})
# Process user data and add to DB.
def post(self, request):
form = self.form_class(request.POST)
if form.is_valid():
user = form.save(commit = False)
# clean form data.
username = form.cleaned_data['username']
password = form.cleaned_data['password']
user.city = form.cleaned_data['city']
user.company = form.cleaned_data['company']
user.set_password(password)
user.save()
# returns User object if credentials are correct
user = authenticate(username= username, password = password)
if user is not None:
if user.is_active:
login(request, user)
return render(request, 'profile.html', {})
return render(request, self.template_name, {'form': form})
如您所见,一旦在注册页面上按下提交,我就会重定向到 profile.html,我在表单操作中调用的视图函数如下
def home(request):
all_users = Profile.objects.all()
city = request.user.city # this line throws error
return render(request, 'profile.html', {'city': city,'login_user': request.user, 'all_users': all_users})
Exception Value: 'User' object has no attribute 'city'
但我无法访问用户所在的城市错误在上面标记的行中抛出。我究竟做错了什么。谢谢你
【问题讨论】:
-
我对此并不完全确定,但您的模型看起来不正确。您应该使用 AbstractUser 而不是 User。请阅读:docs.djangoproject.com/en/1.10/topics/auth/customizing/…
-
在 UserForm 中,model 应该是 Profile
标签: python django django-views