型号:
class Level(models.Model):
number = models.IntegerField()
badge = models.ImageField()
locked_badge = models.ImageField()
timestamp =
models.DateTimeField(auto_now_add=True,auto_now=False,blank=True,
null=True)
unlock = models.CharField(max_length=10,default="A")
def __str__(self):
return str(self.number)
def get_absolute_url(self):
return reverse('student:level-detail', kwargs={'pk': self.pk})
class ToDo(models.Model):
level = models.ForeignKey(Level, on_delete=models.CASCADE)
name = models.CharField(max_length=150)
description = models.TextField()
timestamp =
models.DateTimeField(auto_now_add=True,auto_now=False,blank=True,
null=True)
def __str__(self):
return self.name
class Task(models.Model):
level = models.ForeignKey(Level, on_delete=models.CASCADE)
todo = models.ForeignKey(ToDo, on_delete=models.CASCADE)
student = models.ForeignKey(User, on_delete=models.CASCADE)
title = models.CharField(max_length=150)
content = models.TextField()
timestamp = models.TimeField(auto_now=True)
datestamp = models.DateField( auto_now=True)
like =
models.ManyToManyField(User,related_name='user_likes',blank=True)
is_verified=models.BooleanField(default=False,blank=True)
def __str__(self):
return self.title
def get_absolute_url(self):
return reverse('student:dashboard')
objects = PostManager()
@property
def comments(self):
instance = self
qs = Comment.objects.filter_by_instance(instance)
return qs
@property
def get_content_type(self):
instance = self
content_type =
ContentType.objects.get_for_model(instance.__class__)
return content_type
模板:
{% for level in levels %}
{% if tasks.filter(student=student,level=level).count ==
todos.filter(level=level).count %}
<li>
<a href="javascript:;"><img src="{{ level.badge.url }}" alt="" /></a>
</li>
{% else %}
<li>
<a href="javascript:;"><img src="{{
level.locked_badge.url }}" alt="" /></a>
</li>
{% endif %}
{% endfor %}
示例视图:
@login_required(login_url='/account/login/')
def StudentPublicProfile(request,pk=None):
student = User.objects.get(pk=pk)
levels = Level.objects.all()
todos=ToDo.objects.all()
tasks=Task.objects.all()
context={
'student': student,
'levels' : levels,
'tasks' : tasks,
'todos' : todos,
}
return render(request, 'student_public_profile2.html', context)
这可能需要一些解释。我有3个模型-Level Todo和Task。每个级别包含许多待办事项。待办事项完成后,即在提交待办事项表单时,将其保存在Task模型中。该表单使用模型形式,因此基本上,任务是一个级别的用户已完成的待办事项集。我要根据以下条件显示级别的徽章:如果某个级别的所有待办事项都已完成,则应该显示一种类型的徽章,如果没有,则应该显示锁定的徽章!我该怎么办?< / p>
我遇到了模板标签。.我制作了这样的自定义标签:
@register.filter
def completed(tasks,student, level):
return tasks.filter(student=student,level=level).count()
@register.filter
def alltodos(todo, level):
return todo.filter(level=level).count()
如何从模板调用函数以使其正常工作?
{% for level in levels %}
{% if tasks|completed:tasks,student,level ==
todos|alltodos:todos,level %}
<li>
<a href="javascript:;"><img src="{{
level.badge.url }}" alt="" /></a>
</li>
{% else %}
<li>
<a href="javascript:;"><img src="{{
level.locked_badge.url }}" alt="" /></a>
</li>
{% endif %}
{% endfor %}