django - 使用if语句过滤django模板中的外键内容
问题描述
我有两个模型,一个是另一个的外键。用户只能提交答案。我正在尝试使用 if 语句检查用户的答案是否退出,然后提交答案按钮应更改模板的更新按钮。
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)
file = models.FileField(upload_to='assignment', blank=True, null=True)
Text = models.TextField()
date_added = models.DateTimeField(auto_now_add=True)
date_expire = models.DateTimeField()
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)
我的观点
class AssignmentView(LoginRequiredMixin, ListView):
template_name = 'assignment.html'
context_object_name = 'all_couses'
now = timezone.now()
queryset = Course.objects.all()
def get_context_data(self, **kwargs):
now = timezone.now()
context = super(AssignmentView, self).get_context_data(**kwargs)
context.update({
'assignment_list': Assignment.objects.filter(class_or_level=self.request.user.student.class_or_level, date_expire__gte=now).order_by('-date_expire'),
})
return context
这个模板>用户提交的答案显示他是否提交了其他显示表单喜欢提交答案
{% for assignment in assignment_list %}
<h4>{{ assignment.title|truncatewords:12 }}</h4>
{% if assignment.answer %}
{{ assignment.answer.file }}
<button> <a href="">Update Answer</a></button>
{% else %}
<button> <a href="">Summit Answer</a></button>
{% endif %}
{% endfor %}
解决方案
您可以更改视图或创建模板标记来识别分配是否具有特定用户的响应,我决定更改视图并向分配对象添加一个新变量,该变量将包含请求用户的信息page 对该作业有答案:
class AssignmentView(LoginRequiredMixin, ListView):
template_name = 'assignment.html'
context_object_name = 'all_couses'
now = timezone.now()
queryset = Course.objects.all()
def get_context_data(self, **kwargs):
now = timezone.now()
context = super(AssignmentView, self).get_context_data(**kwargs)
assignment_list = Assignment.objects.filter(
class_or_level=self.request.user.student.class_or_level,
date_expire__gte=now
).order_by('-date_expire')
for assignment in assignment_list:
try:
assignment.student_answer = Answer.objects.get(
assignment=assignment,
student=self.request.user
)
except Answer.DoesNotExist:
pass
context.update({
'assignment_list': assignment_list,
})
return context
然后,在您的模板中,您可以执行以下操作:
{% for assignment in assignment_list %}
<h4>{{ assignment.title|truncatewords:12 }}</h4>
{% if assignment.student_answer %}
{{ assignment.student_answer.file }}
<button> <a href="">Update Answer</a></button>
{% else %}
<button> <a href="">Summit Answer</a></button>
{% endif %}
{% endfor %}
通过这样做,您将实现您正在寻找的东西。
推荐阅读
- asp.net-core - 为什么控制器 no 仅在 Html.PartialAsync 中有效?
- c++ - 这些堆栈声明有什么区别,堆栈
和堆栈 ? - shell - 如何从 AWK 语句运行 CURL
- python - SQLAlchemy Core 可以与 Flask-SQLAlchemy 一起使用吗?
- html - 为每个 div 创建一个 div 并通过查找当前 div 图像的来源来设置链接
- javascript - 具有二维数组js的矩阵
- javascript - 使用任何此命令 sencha ap watch/run/build 在 sencha cmd 中构建失败,它开始突然发生这里是可用的日志
- python - 如何使用 Django 变量设置 HTML 元素的 id?
- javascript - 发送错误信息的正确方式,但代码仍然运行
- node.js - 如何获取大小取决于 MongoDB 聚合的某些条件