2016-10-01 10 views
1

私はDjangoのアプリを書くことで、フィールドオブジェクトと私は子供にアクセスする必要がある管理者およびテンプレート内のフィールドオブジェクト: 私のモデル:はジャンゴ

class House(models.Model): 
    doc_code = models.IntegerField() 
    ... 
    def getGuardian(self): 
     guardian = self.person_set.filter(membership=1) 
     return guardian 
    def __str__(self): 
     return "Family: " + str(self.doc_code) 
class Person(models.Model): 
    family = models.ForeignKey(House) 
    first_name = models.CharField(max_length=50) 
    last_name = models.CharField(max_length=50) 
    ... 
def __str__(self): 
    return self.last_name + ' ' + self.first_name 

ビューで:

houses = House.objects.order_by('doc_code') 

テンプレートで:

<li>{{house.doc_code}} {{house.getGuardian}}</li> 

を私が受け取る:

1 [<Person: Smith John>] 

「[< Person:....>]」を削除して名前を表示するにはどうすればよいですか? また、管理ページでフィールドgetGuardianのタイトルを変更するにはどうすればよいですか?

+0

2番目のメソッド__str __()は意図していないので、モデルには属していません – yedpodtrzitko

+0

コピー貼り付け、私はここでIDを意図することはできません:) –

+0

あなたはできないことを意味しますか?そうでなければ、モデルの文字列表現は、あなたの問題atmである一般的なものになります。 – yedpodtrzitko

答えて

0

最初に、角括弧[]に表示したくない場合は、リストではなく単一のオブジェクトを返す必要があります。保護者のためのクエリは、常に単一のメンバーが返されます場合は、

def getGuardian(self): 
    guardian = self.person_set.get(membership=1) 
    return guardian 

ような何かを行うことができそして保護者は、単一のPersonオブジェクトになります。

第二には、むしろ__str__方法よりも、単にSmith John、あなたがあなたのモデルの__repr__方法をカスタマイズする必要がありますし<Person: Smith John>から表現を変更するには:

def __repr__(self): 
    return self.last_name + ' ' + self.first_name 

私はあなたが本当にそれを行うにしたい場合はわかりませんこれらのオブジェクトは文字列として表示されることがあるため、場合によっては誤解を招く可能性がありますが、それはあなた次第です。あなたのビューで保護者の名前を取得し、コンテキストに渡したほうが良いか、単にgetGuardian持って開始するために保護者の名前を返すことがあります:コードは著作ちょうど誤っている場合、私は知らない

def getGuardianName(self): 
    guardian = self.person_set.get(membership=1) 
    return str(guardian)