0

名簿に似たアプリを作っています。私の見解の1つとして、個人のリストがあります。それぞれIndividualに、Role役職と雇用主にリンクするがあります。雇用主にはいくつかの異なるタイプがあるため、これは一般的な関係です。

ListView汎用ビューを使用して、名前、役職、雇用主を表示する個人のリストを作成しました。

「ジミー、オフィサー、チェース銀行」

「メアリー、総合病院CEO」

会社の名前は、会社の詳細ページに移動するリンクである必要があります。

問題

このリストのテンプレートが1つあるため、個人の雇用主のタイプ(銀行または病院)に基づいてURLを変更する方法を理解するのに苦労しています。

何がうまくいくか

  1. 雇用主のコンテンツタイプを取得して変数を作成するビューの関数を作成する必要がありますか?または、関数をRoleモデルの下に配置する必要がありますか?私はpython/Djangoの初心者であり、これを作成する方法すらわかりません。

  2. テンプレートで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')

ある時点で、私はすべての雇用主に会社モデルを継承させました。雇用主ごとに属性が異なり、非常に複雑だったため、変更しました。

ありがとう!

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>

「役割と個人」の関係は1対多であるため、ここでは簡略化していますが、この場合、雇用主の名前を決定するために使用するメカニズムを使用してください。リストに役割がある場合は、明らかに個人などを取得するために使用role.employerします。role.job_holder

于 2012-10-25T16:07:24.130 に答える