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)

いくつかの答えがあります

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()

ここで、1人のユーザーのすべてのタスク(テンプレートモデルから取得され、これが実行されます)を、回答に関する追加情報とともに表示したいと思います。総回答数(ステータス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を使用して実行しましたが、クリーンなソリューションではないようです。ビューでロジックを実行してから、結果を表示するためだけにテンプレートを使用したいと思います。しかし:タスクリストの各項目にこの値を追加するにはどうすればよいですか?

次のようにする必要がありますか: 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',

)

ただし、最初は何も表示されません(他のビューにはデータが表示されます)。次に、リストの項目と一致するようにデータを追加する方法がわかりません。

なにか提案を?

4

1 に答える 1

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 %}
于 2012-10-30T01:03:57.787 に答える