2015-06-23 2 views
2

Итак, моя проблема в том, что у меня есть подробное представление, в котором отображается конкретная запись из моей базы данных. Затем я использовал get_context_data для захвата значений db из другой модели; однако он выводит что-то странное в моем шаблоне.Django - DetailView и шаблоны

Что я могу изменить в шаблоне, чтобы он отображал каждое правильное значение db из этой другой модели?

models.py

class Projects(models.Model): 
    user = models.ForeignKey(User) 
    slug = models.SlugField() 
    project_title = models.CharField(max_length=30) 
    project_shortdesc = models.CharField(max_length=248) 
    project_desc = models.TextField() 

    def save(self): 
     super(Projects, self).save() 
     date = datetime.date.today() 
     self.slug = '%i%i%i%s' % (
       date.year, date.month, date.day, slugify(self.project_title) 
      ) 
     super(Projects, self).save() 


class ProjectsToDo(models.Model): 
    project_tododate = models.DateField() 
    project_tododesc = models.TextField(max_length = 500) 
    project_id = models.ManyToManyField(Projects) 

views.py

class ProjectDetail(generic.DetailView): 
    model = Projects 
    context_object_name = 'indprojects' 
    template_name = 'projectpage.html' 

    def get_context_data(self, *args, **kwargs): 
     context = super(ProjectDetail, self).get_context_data(*args, **kwargs) 
     context['todolist'] = ProjectsToDo.objects.order_by('project_tododate') 
     context['todoform'] = ProjectToDoForm() 
     context['form'] = ProjectForm(instance=Projects.objects.get(slug=self.kwargs['slug'])) 
     return context 

    def get_queryset(self): 
     return Projects.objects.filter(user=self.request.user) 

    @method_decorator(login_required) 
    def dispatch(self, request, *args, **kwargs): 
     return super(ProjectDetail, self).dispatch(request, *args, **kwargs) 

шаблон

{{todolist}} 

Это из шаблона, выходы: [<ProjectsToDo: ProjectsToDo object>, <ProjectsToDo: ProjectsToDo object>] я пробовал {{todolist.project_tododesc}}, и оба нет данных. Я не уверен, как это сделать, любая помощь будет оценена по достоинству.

+2

Добавить 'unicode' метод вашего класса' ProjectsToDo'. – Gocht

+0

да, что сделал, спасибо. – ZachPerkitny

ответ

1

Я думаю, проблема в том, что вы не определили метод __str__(), если используете Python 3 (или __unicode__() в Python 2.x) в классе ProjectsToDo.

При попытке распечатать экземпляр модели, что происходит, Django будет смотреть на __str__(), чтобы решить, что отображать.

See here for more about __str__()

+1

Я просто: fp: я должен был знать, что – ZachPerkitny

+1

@ user3186219 :) обманул меня в первый раз, когда я тоже это сделал. – lpounng

+0

Другой подход состоял бы в том, чтобы шаблон принял решение о том, как отображать todo и явно перебирать список. Например, '

    {% для товара в todolist%}
  • {{item.something}}
  • {% endfor%}
' – spectras