2016-10-20 1 views
0

に最新取得する方法:私はエラーを取得していますこのモデルではDjangoのモデル

class Rank(models.Model): 
    User = models.ForeignKey(User) 
    Rank = models.ForeignKey(RankStructure) 
    date_promoted = models.DateField() 

    def __str__(self): 
     return self.Rank.Name.order_by('promotion__date_promoted').latest() 

Exception Value:  

'str' object has no attribute 'order_by' 

は、私はデフォルトとして最新のランクをしたいです。これはどのように設定するのですか?

ありがとうございました。

アップデート#1

追加ランク構造

class RankStructure(models.Model): 
    RankID = models.CharField(max_length=4) 
    SName = models.CharField(max_length=5) 
    Name = models.CharField(max_length=125) 
    LongName = models.CharField(max_length=512) 
    GENRE_CHOICES = (
     ('TOS', 'The Original Series'), 
     ('TMP', 'The Motion Picture'), 
     ('TNG', 'The Next Generation'), 
     ('DS9', 'Deep Space Nine'), 
     ('VOY', 'VOYAGER'), 
     ('FUT', 'FUTURE'), 
     ('KTM', 'KELVIN TIMELINE') 
    ) 
    Genre = models.CharField(max_length=3, choices=GENRE_CHOICES) 
    SPECIALTY_OPTIONS = (
     ('CMD', 'Command'), 
     ('OPS', 'Operations'), 
     ('SCI', 'Science'), 
     ('MED', 'Medical'), 
     ('ENG', 'Engineering'), 
     ('MAR', 'Marine'), 
     ('FLT', 'Flight Officer'), 
    ) 
    Specialty = models.CharField(max_length=25, choices=SPECIALTY_OPTIONS) 
    image = models.FileField(upload_to=image_upload_handler, blank=True) 

これは、クラスのランクにランクによって参照Rank_structureです。 ユーザー外部キーは標準ユーザーテーブルに移動します。

+1

最新の「ランク」はどういう意味ですか?あなたが提供した現在の構造はあなたにとって不可能です。 'Rank'オブジェクトには' RankStructure'が1つしかありませんが、 'RankStructure'には' Rank'sがたくさんあります。 –

+0

okです。 RankStructureのテーブルとUserのテーブルがあります。彼らは多くのものがたくさんあるので、私はランクを作った。 Rankはdate_promotedを使用して有効な日付を追加します。だから、Userが与えられ、User.rankを呼び出すと、私は最新のRankを求めます。 – arcee123

+1

UserとRankStructureモデルを追加してください –

答えて

0

self.Rank.Nameorder_byと呼ぶことができるModelManagerではないため、エラーが発生するのはなぜですか。 order_byに電話する場合は、objectsが必要です。複数のコメント作成者からの要求に応じてモデル定義を投稿しない限り、必要なクエリのdjango書式設定を手伝うことはできません。つまり、あなたが望むのは次のようなものだと思う:

def __str__(self): 
    return self.objects.filter(Rank_id=self.Rank_id).order_by('date_promoted').latest().User.Name