【发布时间】:2012-10-29 15:06:33
【问题描述】:
我有一个问题,我不知道解决它的正确方法。
基本上,我有一个模式,称为任务:
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',
)
但首先,它不显示任何内容(而另一个视图显示数据),其次我不知道如何以与列表项匹配的方式添加额外数据。
有什么建议吗?
【问题讨论】:
-
看起来不错,但这不允许我传递参数。所以如果我想计算像 status = 'PR' 和另一个像 status = 'ST' 这样的 smt,我必须创建 2 个属性函数。
-
另一件事。我什么时候必须添加@property 注释,为什么不添加?