0

我正在尝试从我的数据库中获取数据并在模板中显示结果。但是,不显示结果。网站上的结果是:“原始查询必须包含主键”。这是我的代码:

这是我在视图中的代码:

class EventListView(ListView):

    context_object_name = "events"
    template_name = 'core/event_detail_list.html'

    def get_queryset(self):
        queryset =  Event.objects.raw("""select name, date from classroom_event""")
        return queryset

这是我在模板中的代码(event_detail_list.html):

{% extends 'base.html' %}

{% block content %}

<tbody>
  {% for event in queryset %}
    <tr>
      <td class="align-middle">{{ event.name }}</td>
      <td class="align-middle">{{ event.date }}</td>
    </tr>
  {% empty %}
    <tr>
      <td class="bg-light text-center font-italic" colspan="5">You haven't created any events yet.</td>
    </tr>
  {% endfor %}
</tbody>

{% endblock %}

我的模型如下所示:

class Event(models.Model):
    owner_events = models.ForeignKey(User, on_delete=models.CASCADE, related_name='events')
    name = models.CharField(max_length=30)
    date = models.DateTimeField(default=timezone.now)

    def get_absolute_url(self): # defekt
        return reverse('event_detail', kwargs={'pk': self.pk})
        return self.name

    def get_event(self):
        name = escape(self.name)
        date =  escape(self.date)
        return "Name: " + str(name) + " Datum: " + str(date)

class User(AbstractUser):
    is_student = models.BooleanField(default=False)
    is_teacher = models.BooleanField(default=False)

class Teacher(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE, primary_key=True)
    interests = models.ManyToManyField(Subject, related_name='interested_teachers')
    events = models.ManyToManyField(Event, related_name="teacher_events")

    def __str__(self):
        return self.user.username

    def get_events(self):
        return "Name: " + str(self.events.name) + "Datum: "

    def get_events_adr(self):
        return self.events

    def get_interests(self):
        return "Interests: " + str(self.interests.name)

class Student(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE, primary_key=True)
    quizzes = models.ManyToManyField(Quiz, through='TakenQuiz')
    interests = models.ManyToManyField(Subject, related_name='interested_students')
    events = models.ManyToManyField(Event, related_name="student_events")

    def get_unanswered_questions(self, quiz):
        answered_questions = self.quiz_answers \
            .filter(answer__question__quiz=quiz) \
            .values_list('answer__question__pk', flat=True)
        questions = quiz.questions.exclude(pk__in=answered_questions).order_by('text')
        return questions

    def __str__(self):
        return self.user.usernames

事件表如下所示: 在此处输入图像描述

有谁知道,如何将查询集结果显示到模板中?

4

0 回答 0