0

我正在构建一个类似于通讯录的应用程序。对于我的一个观点,我有一个个人列表。每个Individual人都有一个Role将他们与他们的职位和雇主联系起来的链接。有几种不同类型的雇主,所以这是一个通用关系。

使用 ListView 通用视图,我创建了一个个人列表,其中显示了他们的姓名、职位和雇主,即

“吉米,官员,大通银行”

“玛丽,总医院首席执行官”

我需要将公司名称作为链接到公司详细信息页面。

问题

由于我有此列表的一个模板,我很难理解如何根据个人拥有的雇主类型(即银行或医院)更改 url。

什么可能有效

  1. 我应该为采用雇主内容类型并创建变量的视图编写一个函数吗?还是应该将功能放在Role模型下?我是 python/Django 的菜鸟,甚至不知道如何写这个。

  2. 我尝试在模板中使用 if/else 语句,即 if bank,使用此 url,但它不起作用。可能是因为它是一个通用关系,而我的查询不正确。

回应以下评论:

我不确定继承结构的确切含义,但这是我的模型的简化版本;

class Individual(models.Model)
    name = models.CharField(max_length=30)

class Bank(models.Model):
    name = models.CharField(max_length=30)
    staff = generic.GenericRelation('Role',
        content_type_field='employer_content_type',
        object_id_field='employer_id'
    )

   class Hospital(models.Model):
    name = models.CharField(max_length=30)
    staff = generic.GenericRelation('Role',
        content_type_field='employer_content_type',
        object_id_field='employer_id'
    )
... and so on for each different employer

class Role(models.Model):
    title = models.CharField(max_length=70)
    job_holder = models.ForeignKey(Individual)
    employer_content_type = models.ForeignKey(ContentType,
        limit_choices_to={"model__in": ('venue', 'festival', 'artsorganization','bookingagent', 'managementcompany', 'mediaoutlet', 'otherorganization', 'presentercompany', 'publishingcompany', 'presenter', 'recordcompany', 'musician', 'ensemble')}, related_name="employer")
    employer_id = models.PositiveIntegerField()
    employer = generic.GenericForeignKey('employer_content_type', 'employer_id')

有一次,我让所有雇主都继承了公司模式。我改变了它,因为每个雇主都有不同的属性,这让事情变得非常复杂。

谢谢!

4

1 回答 1

0

我相信每种雇主都应该负责为自己提供一个 URL(参见get_absolute_url)。也就是说,每个员工模型都提供get_absolute_url以确定自己的 URL。

然后,您可以简单地使用(在您的模板中):

{{ individual.name }}
<a href="{{ individual.role.employer.get_absolute_url }}">
  {{ individual.role.employer.name }}
</a>

由于“角色与个人”的关系是一对多的,因此此处进行了简化,但在这种情况下,请使用您使用的任何机制来确定雇主的姓名。如果您的列表是角色,您显然只是使用role.employerandrole.job_holder来获取个人等。

于 2012-10-25T16:07:24.130 回答