Отображение данных для вошедшего в систему пользователя в модели - PullRequest
0 голосов
/ 27 апреля 2019

Django версия 2.2

У меня есть модели в Джанго

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/'

Веб-приложение имеет функцию входа в систему, как показано ниже,

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)


шаблон dashboard.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 не выполнено: 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. После входа в систему на панели инструментов должны отображаться учащиеся соответствующего вошедшего в систему учителя

1 Ответ

1 голос
/ 27 апреля 2019

У вас отфильтровано ваших учеников неправильно.

Попробуйте это:

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