我正在构建一个类似于通讯录的应用程序。对于我的一个观点,我有一个个人列表。每个Individual
人都有一个Role
将他们与他们的职位和雇主联系起来的链接。有几种不同类型的雇主,所以这是一个通用关系。
使用 ListView 通用视图,我创建了一个个人列表,其中显示了他们的姓名、职位和雇主,即
“吉米,官员,大通银行”
“玛丽,总医院首席执行官”
我需要将公司名称作为链接到公司详细信息页面。
问题
由于我有此列表的一个模板,我很难理解如何根据个人拥有的雇主类型(即银行或医院)更改 url。
什么可能有效
我应该为采用雇主内容类型并创建变量的视图编写一个函数吗?还是应该将功能放在
Role
模型下?我是 python/Django 的菜鸟,甚至不知道如何写这个。我尝试在模板中使用 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')
有一次,我让所有雇主都继承了公司模式。我改变了它,因为每个雇主都有不同的属性,这让事情变得非常复杂。
谢谢!