Django显示列表中项目的附加信息

时间:2012-10-29 15:06:34

标签: django templates

我遇到了问题,我不知道正确的解决方法。

基本上,我有一个名为Task:

的模式
class Task(models.Model):
    #mto1: many task made of one template
    template = models.ForeignKey(Template)
    STATUS_CHOISE = (('PR', 'In process'), ('ST', 'Stopped'), ('FN', 'Finished'), ('DL', 'Deleted'),)
    status = models.CharField(max_length=2, choices=STATUS_CHOISE, default='ST')
    responses_required = models.IntegerField(default=0)
    date_deadline = models.DateTimeField(auto_now=False, auto_now_add=False)
    date_created = models.DateTimeField(auto_now_add=True, auto_now=False)

可以有几个答案

class Response(models.Model):
    #mto1: many Responses generated for one task
    task = models.ForeignKey(Template)
    STATUS_CHOISE = (('PR', 'Process'), ('FN', 'Finished'))
    status = models.CharField(max_length=2, choices=STATUS_CHOISE, default='ST')
    date_finished= models.DateTimeField(auto_now_add=False, auto_now=True)
    date_created = models.DateTimeField(auto_now_add=True, auto_now=False)
    ip_address=models.IPAddressField()

现在,我想显示一个用户的所有任务(来自模板模型,并且已完成)以及有关答案的其他信息, - 给出答案的数量(所以状态是= FN) - 总答案数(状态FN或PR) - 也许还有一些额外的信息。

我做了这个

@login_required
def TemplateList(request):
    task_list = Task.objects.filter(user=request.user)
    return render_to_response('task_list.html',{'task_list':task_list}, context_instance=RequestContext(request))

但这只是显示模型中存在的数据,我要计算的值是多少?

到目前为止,我使用CustomTag做了它,但它似乎不是一个干净的解决方案。我宁愿在视图中执行逻辑,然后仅使用模板来显示结果。 但是:如何将此值添加到任务列表的每个项目中?

我必须这样做:Passing additional data to a template in Django所以从头开始创建对象(这也需要我在模板中的一些逻辑,因为我要匹配列表中的值与我的箱子里的对象)?或者有更好的解决方案吗?

我尝试了通用视图,例如list_detail.object_list 以这种方式

def TaskListDetail(request):
return list_detail.object_list(
    request,
    queryset = Task.objects.filter(user=request.user),
    template_name = 'task_list.html',
    template_object_name = 'task_list',

)

但首先,它没有显示任何内容(而另一个视图显示数据),其次我不知道如何以与列表项匹配的方式添加额外数据。

任何建议?

1 个答案:

答案 0 :(得分:1)

您可以为模型添加方法。

class Task(models.Model):
   #mto1: many task made of one template
   template = models.ForeignKey(Template)
   STATUS_CHOISE = (('PR', 'In process'), ('ST', 'Stopped'), ('FN', 'Finished'), ('DL', 'Deleted'),)
   status = models.CharField(max_length=2, choices=STATUS_CHOISE, default='ST')
   responses_required = models.IntegerField(default=0)
   date_deadline = models.DateTimeField(auto_now=False, auto_now_add=False)
   date_created = models.DateTimeField(auto_now_add=True, auto_now=False)

   def do_some_calculation(self):
       #make funny things
       return "foo"

在模板中,您可以使用以下方式访问:

{% for taks in task_list %}
   {{ task.do_some_calculation }}
{% endfor %}