Wednesday, May 30, 2012

Foreign Key Chicken/Egg Inline Fu

Hi-

I'm new to Django, but so far I think it is the bee's knees.

I could use some insight into a problem I'm working on.

Given the following...

---------------------------------
# models.py

from django.db import models

class Team(models.Model):
name = models.CharField(max_length=30)

# captain is a player- but there can only be one captain per team.
# null and blank are true to allow the team to be saved despite
not having a captain
captain = models.ForeignKey('Player', related_name='team_captain',
null=True, blank=True)

def __unicode__(self):
return u'{0}'.format(self.name)

class Player(models.Model):
first_name = models.CharField(max_length=20)
last_name = models.CharField(max_length=30)
team = models.ForeignKey('Team')

def __unicode__(self):
return u'{0} {1}'.format(self.first_name, self.last_name)


# admin.py

from league.models import *
from django.contrib import admin

class PlayerInline(admin.TabularInline):
model = Player
extra = 8

class TeamAdmin(admin.ModelAdmin):
inlines = [PlayerInline]
list_display = ('name', 'captain')

---------------------------------

As is, when I create a new team in the admin interface I can add the
players inline, but I have to leave the team captain blank, save the
team, and then go back and change the team and set the captain to one
of the players added previously. This is kind of a drag though.

Is there a way that I can make the team captain be automatically set
to the first player entered inline when the team is saved the first
time?

I 've thought about adding a boolean field to the Player model called
"is_captain", but I want to enforce only one captain per team. If I
were to go this route, is there a way I could make the is_captain
field default to True for the first inline entry but false for the
rest?

Thanks,

-Patrick

--
You received this message because you are subscribed to the Google Groups "Django users" group.
To post to this group, send email to django-users@googlegroups.com.
To unsubscribe from this group, send email to django-users+unsubscribe@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/django-users?hl=en.

No comments:

Post a Comment