我遇到了问题,我不知道正确的解决方法。
基本上,我有一个名为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',
)
但首先,它没有显示任何内容(而另一个视图显示数据),其次我不知道如何以与列表项匹配的方式添加额外数据。
任何建议?
答案 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 %}