我有这4个型号。有一个部分,用户可以查看所有未完成的任务。我如何使用ListView和DetailView显示这些内容? 在django文档中的所有示例中,他们总是只用一个模型给出一个例子。这可以使用CBV完成还是有替代方案?
模特
class task_a(models.Model):
created_by = models.ForeignKey('auth.User')
task_complete = models.BooleanField(default=0)
q1 = models.CharField(max_length=60)
q2 = models.DateField()
q3 = models.TimeField()
q4 = models.TextField()
class Meta:
verbose_name_plural = "task_a"
def get_absolute_url(self):
return reverse('task_a')
def __unicode__(self):
return u'%s %s %s %s %s' % (self.q1, self.q2, self.q3, self.q4,self.q5)
class task_b(models.Model):
created_by = models.ForeignKey('auth.User')
task_complete = models.BooleanField(default=0)
q1 = models.CharField(max_length=60)
q2 = models.DateField()
q3 = models.TimeField()
q4 = models.TextField()
class Meta:
verbose_name_plural = "task_b"
def get_absolute_url(self):
return reverse('task_b')
def __unicode__(self):
return u'%s %s %s %s %s' % (self.q1, self.q2, self.q3, self.q4,self.q5)
class task_c(models.Model):
created_by = models.ForeignKey('auth.User')
task_complete = models.BooleanField(default=0)
q1 = models.CharField(max_length=60)
q2 = models.DateField()
q3 = models.TimeField()
q4 = models.TextField()
class Meta:
verbose_name_plural = "task_c"
def get_absolute_url(self):
return reverse('task_c')
def __unicode__(self):
return u'%s %s %s %s %s' % (self.q1, self.q2, self.q3, self.q4,self.q5)
class task_d(models.Model):
created_by = models.ForeignKey('auth.User')
task_complete = models.BooleanField(default=0)
q1 = models.CharField(max_length=60)
q2 = models.DateField()
q3 = models.TimeField()
q4 = models.TextField()
class Meta:
verbose_name_plural = "task_d"
def get_absolute_url(self):
return reverse('task_d')
def __unicode__(self):
return u'%s %s %s %s %s' % (self.q1, self.q2, self.q3, self.q4,self.q5)
答案 0 :(得分:3)
您可以通过覆盖班级中的get_context_data()
函数来添加额外的上下文变量:
class MultipleModelsListView(ListView):
model = TaskA # Class names should use capitalized CamelCase
def get_context_data(self, **kwargs):
kwargs = super(MultipleModelListView, self).get_context_data(**kwargs)
kwargs.update({
'taskb_list': TaskB.objects.all(), # or with some filter applied
'taskc_list': TaskC.objects.all(),
'taskd_list': TaskD.objects.all(),
})
return kwargs
除了ListView
提供的默认上下文之外,这将为您提供迭代的上下文变量taskb_list
,taskc_list
和taskd_list
。
您可以在模板中迭代这些:
{% for task in object_list %} {# default supplied by ListView #}
{{ task.whatever }}
{% endfor %}
{% for task in taskb_list %}
{{ task.whatever }}
{% endfor %}
{# etc. #}