django - 如何在 django 的详细视图上仅显示用户在外键中输入的相关数据
问题描述
我正在构建这个简单的测验应用程序。此应用程序允许所有用户以 Docx 格式提交作业的答案。每当用户在 DetailView 页面上查看问题时,如果用户已经提交了该分配的解决方案,那么该解决方案也应该显示在 DetailView 页面上。目前我得到的是所有用户提交的所有答案。我只想要用户在详细信息页面上对该作业的回答,这是我的模型。
class Assignment(models.Model):
title = models.CharField(max_length=120)
slug = models.SlugField(max_length=500)
course = models.ForeignKey(Course, on_delete=models.CASCADE)
class_or_level = models.ForeignKey(StudentClass, on_delete=models.CASCADE)
teacher = models.ForeignKey(Teacher, on_delete=models.CASCADE)
Text = models.TextField()
date_added = models.DateTimeField(auto_now_add=True)
date_expire = models.DateTimeField()
def __str__(self):
return self.title
class Answer(models.Model):
slug = models.SlugField(max_length=500)
assignment = models.ForeignKey(Assignment, on_delete=models.CASCADE)
student = models.ForeignKey(User, on_delete=models.CASCADE)
file = models.FileField(upload_to='assignment')
date_added = models.DateTimeField(auto_now_add=True)
def __str__(self):
return '{} - {} '.format(self.assignment, self.student)
下面是我的看法
class AssignmentSubmitView(DetailView):
model = Assignment
template_name = 'assignment_submit.html'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['student_answer'] = self.object.answer_set.all()
return context
下面是我在 detailview 模板上的过滤器。
{% for answer in student_answer %}
{{ answer.file }}
{% endfor %}
解决方案
您首先需要知道访问该页面的用户,所以我假设您有一个用户模型和一个身份验证系统。
在视图中
class AssignmentSubmitView(DetailView):
model = Assignment
template_name = 'assignment_submit.html'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['student_answer'] = self.object.answer_set.filter()#then filter and get the answer specific to that user here (depending on your user and Assignment models)
return context
并在您的模板中
{% if user.is_authenticated %}
{% if student_answer %}
{% for answer in student_answer %}
{{ answer.file }}
{% endfor %}
{% endif %}
{% endif %}
推荐阅读
- android - 如何在 Android 的倒数计时器应用程序中包含休息时间?
- angular - 自定义 Angular Material 输入 - 自动完成可见时删除底部边框
- incompatibletypeerror - 数据绑定失败
- mysql - 在 Debian 10 上使用 Ansible 创建新数据库时收到 Python 错误
- javascript - 我们如何访问 Node.js 应用程序之外的内存?
- linux - 在内核 debians 中包含 objTools(linux-headers 和 linux-image)
- html - 页面背景未完全着色
- qt - 删除树项析构函数时未调用
- python-3.x - 我正在使用 SVR() 函数进行回归。我无法使用 #pso by #Pyswarm 优化它的参数
- javascript - 为什么下面的代码总是在立即数之前打印超时?