2013-09-09 2 views
0

Моя модель похожа так:Джанго метод модели, ссылаясь на другую модель с помощью FK

class PlayerProfile(models.Model): 
    user = models.OneToOneField(User) 
    team = models.ForeignKey(Team) 
    is_captain = models.BooleanField(default=False) 
    def __unicode__(self): 
     return self.user.get_username() 

class Game(models.Model): 
    team = models.ForeignKey(Team) 
    game_time = models.DateTimeField() 
    location = models.CharField(max_length=100) 
    def __unicode__(self): 
     return self.team.name + ' ' + unicode(self.game_time) 

class GameStatus(models.Model): 
    game = models.ForeignKey(Game, default=None, null=True) 
    team = models.ForeignKey(Team, default=None, null=True) 
    player = models.ForeignKey(PlayerProfile, default=None, null=True) 
    game_status = models.CharField(max_length=1) 

Можно ли написать метод в PlayerProfile, которые могут получить доступ к модели GameStatus, так что я могу получить свойство game_status, если он существует?

+0

Удачи вам в этом? Я думаю, что ты определенно на правильном пути. – zeantsoi

+0

Я пробовал ваше последнее обновление, но это не дает мне то, к чему я стремился. Этот последний код выполняет итерацию всех игроков в порядке (что я хочу), но внутренний цикл просто повторяется через каждый gamestatus, я хочу, чтобы внутренний цикл повторялся через этого конкретного игрока и game.id .. Я буду продолжать пытаться, спасибо, хотя , Кстати, я не могу продвинуться, пока не получу определенную репутацию или что-то. –

+0

Ах, я понимаю. Ознакомьтесь с изменением моего вопроса для правильного поиска. Как FYI, __accepting__ - это не то же самое, что __upvoting__. Вы всегда можете ответить на вопрос, который вы задали безрезультатной репутации. – zeantsoi

ответ

0

Не нужно писать метод на PlayerProfile.

Вы можете использовали встроенный менеджер отношения, чтобы посмотреть это вверх через родителя PlayerProfile, если вы знаете, какой GameStatus принадлежность к PlayerProfile вам необходимо получить доступ:

# look up first player returned from the PlayerProfile model manager 
player_profile_1 = PlayerProfile.objects.all()[0] 

# look up first game status associated with the first player profile, 
# then access the game_status attribute 
game_status_1 = player_profile_1.gamestatus_set.all()[0].game_status 

UPDATE:

Если у вас есть доступ к игре game_status из такой петли:

{% for playerprofile in game.team.playerprofile_set.all %} 
    {% for game_status in playerprofile.gamestatus_set.get(game_id=game.id) %} 
     {{ game_status.game_status }} 
    {% endfor %} 
{% endfor %} 
+0

в этих примерах, как указать игру (для GameStatus)? Кроме того, где я их помещаю? в представлении? шаблон? –

+0

Как вам _want_ указать игру? По какому атрибуту вы хотите посмотреть игру? Вы, вероятно, захотите использовать это в представлении, поскольку это бизнес-логика. – zeantsoi

+0

с ПК, поэтому в основном, предоставляя игровой_ид ... также, из любопытства, чтобы ответить на исходный вопрос, можно ли было бы сделать в методе? Редактировать: это по существу левое внешнее соединение с gamestatus –

Смежные вопросы