首页 > 解决方案 > 在模型中显示登录用户的数据

问题描述

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'),但它没有提供学生姓名,只是显示一个有序的列表编号。

我有两个要求

  1. 我有一个模型表单,登录的教师可以在其中添加学生,而我使用上面提到的第一个视图添加学生时,它会触发错误 '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 视图是学生应该添加到各自登录的老师下,而不是通过表单提供老师的价值

  1. 登录后,仪表板必须显示相应登录教师的学生。

标签: pythondjangodjango-modelsdjango-views

解决方案


您错误地过滤了学生。

试试这个:

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})

推荐阅读