【发布时间】:2017-05-20 13:57:44
【问题描述】:
我试图定义登录用户的前缀,但我得到了这个异常RelatedObjectDoesNotExist。问题是 django 找不到用户 Student 和 Parent(异常值:用户没有学生)
我想根据用户的类型渲染不同的模板
models.py
from django.db import models
from django.contrib.auth.models import User
# Create your models here.
class Teacher(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
prefix = 't'
def __str__(self):
return self.user.first_name + ' ' + self.user.last_name
class Student(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
parent = models.ForeignKey('Parent', null=True)
prefix = 's'
def __str__(self):
return self.user.first_name + ' ' + self.user.last_name
class Parent(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
prefix = 'p'
def __str__(self):
return self.user.first_name + ' ' + self.user.last_name
views.py
def sign_in(request):
if request.method == 'POST':
username = request.POST.get('username')
password = request.POST.get('password')
user_login = User.objects.get(username=username)
user = authenticate(username=username, password=password)
if user is not None:
login(request, user_login)
if user_login.student.prefix == 'S':
return render(request, 's.html')
if user_login.teacher.prefix == 'T':
return render(request, 't.html')
if user_login.parent.prefix == 'P':
return render(request, 'p.html')
else:
return render(request, 'index.html', {'error': True})
else:
return render(request, 'index.html')
系统检查未发现任何问题(0 静音)。
2017 年 5 月 20 日 - 21:43:51
Django 1.11.1 版,使用设置'e_diary.settings'
在 http://127.0.0.1:8000/ 启动开发服务器
使用 CTRL-BREAK 退出服务器。
[20/5/2017 21:43:56]“GET / HTTP/1.1”200 983
内部服务器错误:/sign_in/
回溯(最近一次通话最后):
文件“C:\Users\USER\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\core\handlers\exception.py”,第 41 行,在内部
响应 = get_response(请求)
_get_response 中的文件“C:\Users\USER\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\core\handlers\base.py”,第 187 行
response = self.process_exception_by_middleware(e, request)
_get_response 中的文件“C:\Users\USER\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\core\handlers\base.py”,第 185 行
响应 = Wrapped_callback(request, *callback_args, **callback_kwargs)
文件“C:\Users\USER\Desktop\e_diary\electronic_diary\views.py”,第 29 行,在 sign_in
如果 user_login.teacher.prefix == 'T':
文件“C:\Users\USER\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\db\models\fields\related_descriptors.py”,第 406 行,在 __get__
self.related.get_accessor_name()
django.db.models.fields.related_descriptors.RelatedObjectDoesNotExist:用户没有老师。
[20/5/2017 21:44:02]“POST /sign_in/HTTP/1.1”500 70872
【问题讨论】:
-
展示你的模型
-
@SakeBolatbek - StackOverflow 上通常不赞成您的代码截图。只需将您的代码复制粘贴到问题中即可。如果您遇到格式问题,我们可以为您解决。另外,请花一些时间考虑您的问题的细节 - 您面临什么问题,堆栈跟踪是什么,以及期望的结果是什么。这样,您可以获得更好的响应。
标签: django django-models django-views