2015-12-03 3 views
0

В моих моделях у меня есть как задачи, так и проекты. То, что я пытаюсь сделать, - это добавить связанные задачи в контекст страницы, на которой обновляются проекты.Как ссылаться на объект в классе в django

Ошибка я получаю:

типа объекта 'проект' не имеет атрибута 'идентификатор'

В models.py У меня есть класс задача:

class task(models.Model): 
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) 
    name = models.CharField(max_length=200) 
    .... 
    related_project = models.ForeignKey(project, blank=True, null=True) 

Также в models.py, у меня есть класс проекта:

class project(models.Model): 
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) 
    name = models.CharField(max_length=200) 
... 

мнение я использую, чтобы обновить объект проекта является:

class ProjectUpdate(UpdateView): 
    """ 
    This will be used to view and update projects 
    """ 
    template_name = 'tasks/update-project.html' 
    model = project 
    fields = ['name','status', 'purpose', 'vision', 'big_steps', 'context', 'priority', 'due_date', 'related_project'] 

    def get_context_data(self, **kwargs): 
     """ 
     This puts the tasks related to the particular project in context 
     """ 
     # Call base implementation first to get a context 
     context = super(ProjectUpdate, self).get_context_data(**kwargs) 
     # TO DO: Add in querysets of related tasks 
     context = context['related_tasks'] = task.objects.filter(related_project__id=project.id) 

Проблема, кажется, что «project.id» на самом деле не получить доступ к «идентификатор» конкретного объекта проекта. Как добавить задачи, связанные с конкретным объектом проекта, обновляемым с помощью атрибута «related_project» задачи (который имеет в качестве внешнего ключа объект проекта)?

+0

Прежде, чем я удалю свой ответ, ваша проблема с получением конкретного экземпляра, который отображается или как получить доступ к идентификатору? – Sayse

+0

, вы можете начать с следующих рекомендаций pep8 и дать своему классу заглавную букву ('Project') – Sayse

+0

Как получить доступ к идентификатору в целом. То есть, вообще говоря, как мне получить доступ к id того, какой объект проекта будет отображаться в представлении ProjectUpdate. – jejy2343

ответ

1

Вы не можете использовать project.id, потому что project является моделью, а не экземпляром, который вы обновляете. Обычно вы вызываете свою модель Project и экземпляр модели project. Вызов вашей модели project путает других пользователей, так как они предполагают, что это экземпляр вместо модели.

В способе get_context_data вы можете получить к объекту объект self.object.

context['related_tasks'] = task.objects.filter(related_project__id=self.object.id) 

Удостоверяются, что вы не установили context = context['related_tasks'] = ....

+0

. Спасибо. Это сработало, и я изменил модельную капитализацию, как вы предложили. – jejy2343

Смежные вопросы