2017-10-02 2 views
0

私はモデルプロファイルと 'Nation'と呼ばれる別のモデルを持っています。このモデルはプロファイルとユーザーをForeignKeysとして扱います。モデルの関係が失敗し、テンプレートでデータを取得できない

それはこのように、ここで

class Profile(models.Model): 
    user = models.OneToOneField(User, on_delete=models.CASCADE) 
    user_type=models.CharField(max_length=10, choices=M_CHOICES) 

class Nation(models.Model): 
    user= models.ForeignKey(User, related_name='natuser') 
    profile = models.ForeignKey(Profile, related_name='nat_hr') 
    ref_number = models.CharField(max_length=20, default=pm_tag) 

ロジックは、ユーザのタイプをチェックし、フィールドの値 'は、ユーザモデルに関連を示すようになっています。このために、我々は、ユーザタイプが国家モデルに属していることを確認した後

ビューでは、私は、テンプレート内

@login_required 
def profile_detail(request, username): 
    user= get_object_or_404(User, username=username) 
    try: 
     the_detail= user.profile 
    except ObjectDoesNotExist: 
     return None 

をした、ユーザーがそう彼の参照番号を取得するには、国家モデルに属していると考えています、私はユーザーref_numberを取得するために、以下のコードを書いたが、それは失敗している。

{{the_detail.nat_hr.ref_number}} 

{{the_detail.user.profile.nat_hr.ref_number}} 

related_nameを使用してテンプレートを使用してモデルに属するデータを取得する方法はありますか?

答えて

1

あなたの場合、ONE ProfileはMANY Nationを持つことができます。したがって、次のようにforループを使用して、それぞれを印刷する必要があります。

{% for nation in the_detail.nat_hr.all %} 
    {{nation.ref_number}} 
{% endfor %} 

希望すると助かります!

+0

エラー: 'the_detail.nat_hr.all()'の '()'。 – YoYo

+0

@YoYo申し訳ありませんが、それはちょうど '.all'でなければなりません。 –

+0

完了しました。ありがとう! – YoYo

0

あなたProfileForeignKeyは、多対1の関係(ForeignKey)を実現するため、多くのNationオブジェクトを持つことができます。あなたはProfileのためにNationsのセットを得ることができます。

+0

詳細を教えてください。 – YoYo

+0

ForeignKeyは多対1の関係を実現します。つまり、あなたの「プロフィール」は多くの「国」を持つことができます。同時に、「国家」は「プロフィール」を1つだけ持つことができます。そのため、ループを使用するか、必要な「プロファイル」オブジェクトを明確にする必要があります。これにはクエリフィルタを使用できます)。 –

関連する問題