名簿に似たアプリを作っています。私の見解の1つとして、個人のリストがあります。それぞれIndividual
に、Role
役職と雇用主にリンクするがあります。雇用主にはいくつかの異なるタイプがあるため、これは一般的な関係です。
ListView汎用ビューを使用して、名前、役職、雇用主を表示する個人のリストを作成しました。
「ジミー、オフィサー、チェース銀行」
「メアリー、総合病院CEO」
会社の名前は、会社の詳細ページに移動するリンクである必要があります。
問題
このリストのテンプレートが1つあるため、個人の雇用主のタイプ(銀行または病院)に基づいてURLを変更する方法を理解するのに苦労しています。
何がうまくいくか
雇用主のコンテンツタイプを取得して変数を作成するビューの関数を作成する必要がありますか?または、関数を
Role
モデルの下に配置する必要がありますか?私はpython/Djangoの初心者であり、これを作成する方法すらわかりません。テンプレートでif/elseステートメントを使用しようとしました。つまり、銀行の場合はこの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')
ある時点で、私はすべての雇用主に会社モデルを継承させました。雇用主ごとに属性が異なり、非常に複雑だったため、変更しました。
ありがとう!