如何在django

时间:2015-12-03 21:46:25

标签: python django django-models foreign-keys django-views

在我的模型中,我有两个任务和项目。我尝试做的是将相关任务添加到更新项目的页面上下文中。

我得到的错误是:

  

输入对象'项目'没有属性' id'

在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)
...

我用来更新Project对象的视图是:

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"实际上并没有访问" id"特定项目对象。如何通过任务" related_project"添加链接到正在更新的特定项目对象的任务。属性(具有项目对象的外键)?

1 个答案:

答案 0 :(得分:1)

您无法使用<xs:simpleType name="ParamTypeRestriction"> <xs:restriction base="xs:string"> <xs:enumeration value="MyBaseClass"></xs:enumeration> <xs:enumeration value="MyClassA"></xs:enumeration> ... </xs:restriction> </xs:simpleType> ,因为project.id是模型,而不是您要更新的实例。通常,您可以调用模型project和模型实例Project。调用模型project会使其他用户感到困惑,因为他们会认为它是实例而不是模型。

project方法中,您可以使用get_context_data访问该对象。

self.object

确保您未设置context['related_tasks'] = task.objects.filter(related_project__id=self.object.id)