首页 > 解决方案 > Django - 在页面上显示两个表数据

问题描述

我有一张课程表和考试表。我按院士筛选列出。当我输入课程内容时,我会看到课程的数据。我想在课程页面上查看属于该课程的考试信息,但由于表格不同,我无法显示。每课考试:期中考试和期末考试。例如 ; 期中考试,A,期末考试;期中考试B、期末考试、补考。

模型.py

def set_user_files_upload_path(instance, filename):
    return '/'.join([
        'users', 'user_%d' % instance.id, 'images', filename
    ])

class Lesson(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    lesson_name = models.CharField(verbose_name=_('Ders Adı'), max_length=150)
    lesson_content = models.TextField(verbose_name=_('Ders İçeriği'), blank=True)
    lesson_content_file = models.FileField(
        verbose_name=_('Ders İçeriği Dosya'),
        upload_to=set_user_files_upload_path, blank=True, null=True
    )
    lesson_notes = models.TextField(verbose_name=_('Ders Notu'), blank=True)
    lesson_notes_file = models.FileField(
        verbose_name=_('Ders Notu Dosya'),
        upload_to=set_user_files_upload_path,
        blank=True, null=True
    )

    def __str__(self):
        return '{lesson_name}'.format(
            lesson_name=self.lesson_name
        )

    class Meta:
        verbose_name = 'Lesson'
        verbose_name_plural = 'Lesson'


class Exam(models.Model):
    lesson = models.ForeignKey(Lesson, on_delete=models.CASCADE)
    exam_type = models.CharField(verbose_name=_('Sınav Türü'), max_length=50)
    exam_information = models.CharField(
        verbose_name=_('Sınav Hakkında Bilgi'), max_length=500)
    exam_file = models.FileField(
        verbose_name=_('Sınav Kağıdı Dosya'),
        upload_to=set_user_files_upload_path, blank=True, null=True
    )
    exam_answer_file = models.FileField(
        verbose_name=_('Cevap Anahtarı Dosya'),
        upload_to=set_user_files_upload_path, blank=True, null=True
    )

    def __str__(self):
        return '{lesson} - {exam_type}'.format(
            lesson=self.lesson.lesson_name,
            exam_type=self.exam_type
        )

    class Meta:
        verbose_name = 'Exam'
        verbose_name_plural = 'Exam'

视图.py

class LessonListView(ListView):
    model = Lesson
    template_name = 'edms/lesson/list.html'

    def get(self, request):
        lessons = Lesson.objects.filter(user=request.user)
        return render(request, self.template_name, {'lessons': lessons})


class LessonDetailView(DetailView):
    model = Lesson
    template_name = 'edms/lesson/detail.html'

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['lesson_list'] = Lesson.objects.filter(pk=self.kwargs['pk'])
        context['exam_list'] = Exam.objects.filter(pk=self.kwargs['pk'])
        return context

标签: djangopython-3.x

解决方案


推荐阅读