/ :
player_list = Player.objects.all()
player_ids = player_list.value_list('id', flat=True)
participant_list = Participant.objects.filter(player_id__in=player_ids)
participants = dict([(p.player_id, p) for p in participant_list])
for player in player_list:
if player.id in participants:
print participants[player.id].status
, . .
. /:
class Player(models.Model):
name = models.CharField(max_length=128)
is_participant = models.BooleanField(default=False)
class Participant(Player):
status = models.CharField(max_length=32)
def save(self, *args, **kwargs):
if not self.id:
self.is_participant = True
super(Participant, self).save(*args, **kwargs)
, , Participant , Player, , , . . , Player. None , , .
- , , Participant. , , :
class Player(models.Model):
name = models.CharField(max_length=128)
participant_status = models.CharField(max_length=32)
class Participant(Player):
pass
:
for player in Player.objects.all()
if player.participant_status:
print participant.status
, . , a) b) .
, , , , , .
" "
OneToOneField, . , , select_related(), , .
class Player(models.Model):
name = models.CharField(max_length=128)
participant = models.OneToOneField('Participant', null=True)
class Participant(models.Model):
status = models.CharField(max_length=32)
:
player_list = Player.objects.all().select_related('participant')
for player in player_list:
if player.participant_id is not None:
print player.participant.status