2014-02-14 76 views
2

我正在構建一個Django應用程序來模擬足球比賽。我的模型中有兩個是:Django OneToOneField unicode方法

class Match(models.Model): 
    arsenal = models.OneToOneField('Roster', related_name="arsenalRoster") 
    opponent = models.OneToOneField('Roster', related_name="opponentRoster") 
    date = models.DateTimeField() 
    location = models.CharField(max_length=64) 
    ... 

class Roster(models.Model): 
    squad = models.ForeignKey('Squad') 

    def __unicode__(self): 
     if self.squad.season.footballClub.name is "Arsenal Football Club": 
      return u'%s, @%s' % (self.match.date, self.match.location) 
     else: 
      return u'%s, %s' % (self.match.date, self.squad.season.footballClub.name) 

現在很明顯,我不能因爲沒有實例屬性來訪問比賽對象返回self.match.date,並適當地我得到一個錯誤:AttributeError: 'Roster' object has no attribute 'match'。但是,這是我想根據給定的條件返回的信息。是否可以從Roster對象的Match對象中訪問實例數據?我如何在不改變模型的情況下實現我想要做的事情?

回答

2

使用related_name代替match

#self.match.date 
self.arsenalRoster.date 

或(你有Match模型2鏈接Roster):

self.opponentRoster.date 
+0

使用相關的名字給我一個DoesNotExist錯誤:'提高自我。 related.model.DoesNotExist DoesNotExist' –

+0

@ChrisClouten你應該檢查相關對象是否存在 – ndpu