python - 在模型中显示登录用户的数据
问题描述
Django 2.2 版
我在 Django 中有模型
class Class_teacher(models.Model):
first_name = models.CharField(max_length=200)
last_name = models.CharField(max_length=200)
empid = models.CharField(max_length=10)
standard = models.IntegerField()
division = models.CharField(max_length=1)
subject = models.CharField(max_length=200)
email = models.EmailField(max_length=30)
def __str__(self):
return self.first_name + ' -- ' + str(self.school)
class Student(models.Model):
first_name = models.CharField(max_length=200)
last_name = models.CharField(max_length=200)
classteacher = models.ForeignKey('Class_teacher', on_delete=models.CASCADE, )
reg_id = models.CharField(max_length=15)
parent_first_name = models.CharField(max_length=200)
parent_second_name = models.CharField(max_length=200)
email = models.EmailField(max_length=100)
def __str__(self):
return self.first_name + ' ' + self.last_name
添加学生的视图
class StudentCreate(LoginRequiredMixin, CreateView):
login_url = '/signin/'
model = Student
fields = ['first_name', 'last_name', 'parent_first_name','parent_second_name', 'email', 'reg_id']
success_url = '/dashboard/'
该webapp具有如下登录功能,
def signin(request):
if request.method == 'POST':
username = request.POST.get('username')
password = request.POST.get('password')
user = authenticate(username=username, password=password)
if user:
if user.is_active:
login(request, user)
return HttpResponseRedirect('../dashboard/')
else:
return HttpResponse("Your account was inactive.")
else:
return HttpResponse("Invalid login details given")
else:
return render(request, 'webapp/login.html')
def dashboard(request):
email = request.user.email
if Class_teacher.objects.filter(email__iexact=email).count() == 1:
students = Student.objects.values('classteacher')
context = { 'students' : students}
return render(request, 'webapp/dashboard.html',context)
仪表板.html 模板
{% if students %}
<ol>
{% for student in students %}
<li>{{student.first_name}} {{student.last_name}}</li>
{% endfor %}
</ol>
{% else %}
<h3>No Students Added</h3>
{% endif %}
{% endblock %}
我用过students = Student.objects.values('classteacher')
,但它没有提供学生姓名,只是显示一个有序的列表编号。
我有两个要求
- 我有一个模型表单,登录的教师可以在其中添加学生,而我使用上面提到的第一个视图添加学生时,它会触发错误 'NOT NULL constraint failed: webapp.classteacher_id' ,当我将添加视图更改为下方时效果很好
class StudentCreate(LoginRequiredMixin, CreateView):
login_url = '/signin/'
model = Student
fields = ['first_name', 'last_name', 'parent_first_name','parent_second_name', 'email', 'reg_id' , 'classteacher']
success_url = '/dashboard/'
我想要的 studentadd 视图是学生应该添加到各自登录的老师下,而不是通过表单提供老师的价值
- 登录后,仪表板必须显示相应登录教师的学生。
解决方案
您错误地过滤了学生。
试试这个:
def dashboard(request):
email = request.user.email
class_teacher = Class_teacher.objects.get(email=email)
students = Student.objects.filter(classteacher=class_teacher)
return render(request, 'webapp/dashboard.html', {'students': students})
推荐阅读
- ruby-on-rails - Ruby Google::Auth::WebUserAuthorizer 抛出未定义的 get 方法异常
- sql - 如何 GROUP BY date,id 通过检查 ORACLE 中的总交易量
- c# - 如何获取.net核心项目中项目文件夹中存在的文件的相对路径
- ionic4 - 离子范围如果为真,按下旋钮时会显示一个具有整数值的引脚。我可以在不按下旋钮的情况下默认显示吗?
- python - 将数组保存在 csv 文件的单元格中
- javascript - React useState 在运行时运行 useEffect
- java - Java 在使用 Scanner 将字符串数组作为用户输入时打印“null”并突然结束
- regex - c# Regex.Replace 为 (.*) 但这个 (.*) 有最大长度
- python - 我将视频 mp4 文件转换为音频 mp3 格式,现在我想使用 os.remove 删除原始 Mp4 视频文件但给出错误
- vue.js - 在 Vuetify 中使用 srcset