Hello,

Hopefully it becomes clear as well from my code but, here is what is going 
on. There is an Athlete registration form which has a long list of choices 
or communities in the form of a multiple choices that the user can select 
to then become a part of the communities they select. Then what I'm trying 
to do is in my EditProfile view basically render this long list of multiple 
choices again but obviously it would make sense to show the user what ones 
they have selected/are already in, be able to deselect from this group to 
remove themselves from the ones they selected on registration, or to select 
new ones to then be added to those communities.

My EditProfile view:

# AU Athlete Edit Profile

def EditProfile(request):

    if request.user.is_authenticated():

        contexterror = {}

        context = {}

        contexterror = {'Error': 'Error'}

        # Since it is the generic view know we know if the user in the 
request is a specific group this way

        if request.user.groups.filter(name='Athletes').exists():

            # Since it is the generic view know we know if the user in the 
request is in 'Athletes' / member of of the 'Athletes' Group

            if request.method == 'POST':

                userprofile = UserProfileUpdateForm(request.POST, 
instance=request.user)

                athleteprofile = AthleteProfileUpdateForm(request.POST, 
instance=request.user.profile)

                # Need to make it so it checks the forms properly and saves 
the info if its correct

                if userprofile.is_valid() and athleteprofile.is_valid():

                    # Do something with the user selected athlete groups 
below

                    athletegroupsids = request.POST.getlist(
'athletecommunities')

                    # Iterate though all the athlete group names and 
collect the objects which we can use to add the request.user to those 
athlete groups

                    for athletegroupLOWERCASEname in athletegroupsids:

                        # Filter through all the communities and take the 
check box selection id which is lowercase and compare it to the 
communityurl which is the lowercase name

                        AthleteCommunities = Community.objects.get(url = 
athletegroupLOWERCASEname)

                        # Check to make sure we have one athlete community 
that we want to add the athlete to

                        # Get the name of the athlete community

                        AthleteCommunityName = AthleteCommunities.name

                        # By taking the desired athlete community name and 
filtering down the Athlete Group name be then add the user to the group

                        AddAthleteToGroup = 
Group.objects.get(name=AthleteCommunityName)

                        
AddAthleteToGroup.user_set.add(request.user.athlete.athleteuser)

                    # Now the user has been added to all the groups they 
selected and notifications will go when a post is made in each respective 
group

                    # Save the two forms to the database

                    userprofile.save() and athleteprofile.save()

                return HttpResponseRedirect('/profile/')

            else:

                user = request.user

                profile = user.profile

                userprofile = UserProfileUpdateForm(instance = user)

                athleteprofile = AthleteProfileUpdateForm(instance = 
profile)

                context = {'AthleteProfileUpdateForm': athleteprofile, 
'UserProfileUpdateForm': userprofile}

            return render_to_response('editprofile.html', context, 
context_instance = RequestContext(request))

        return render_to_response('editprofile.html', contexterror, 
context_instance = RequestContext(request))

    return HttpResponseRedirect('/login/')



My forms.py:


from django import forms

from django.forms import ModelForm

from django.contrib.auth.models import User

from athletesunited.athletes.models import Athlete


# Athlete Community Choices

ATHLETECOMMUNITIESCHOICES = (('archery', 'Archery',), ('mensbasketball', 
'Men\'s 
Basketball',), ('womensbasketball', 'Women\'s Basketball',), ('baseball', 
'Baseball',), ('cardio', 'Cardio',), ('cheerleading', 'Cheerleading',), (
'crochet', 'Crochet',), ('dieting', 'Dieting',), ('football', 'Football',), 
('golf', 'Golf',), ('gymnastics', 'Gymnastics',), ('hockey', 'Hockey',), (
'injuryrecovery', 'Injury Recovery',), ('lacrosse', 'Lacrosse',), ('lifting', 
'Lifting',), ('rugby', 'Rugby',), ('racing', 'Racing',), ('swimming', 
'Swimming',), ('soccer', 'Soccer',), ('skateboarding', 'Skateboarding',), (
'tennis', 'Tennis',),  ('wrestling', 'Wrestling',))


# Athlete Update Profile Form

class AthleteProfileUpdateForm(ModelForm):

    athletebirthday = forms.CharField(label=(u'Athlete Birthday:'))

    athleteurl = forms.CharField(label=(u'Athlete Url:'))

    #athletecommunities = forms.MultipleChoiceField(label=(u'Athlete 
Communities:'), widget=forms.CheckboxSelectMultiple, required=False, 
choices=ATHLETECOMMUNITIESCHOICES)

    

    class Meta:

        model = Athlete

        exclude = ('athleteuser',)

        fields = ['athletebirthday', 'athleteurl', 'athletecommunities', 
'athletecolleges',]


    def selected_athlete_communities(self):

        return [athletecommunities[0] for athletecommunities 
inATHLETECOMMUNITIESCHOICES]



My model for the athlete:


from django.contrib.auth.models import User


# Athlete User

class Athlete(models.Model):

    athleteuser = models.OneToOneField(User)

    athletebirthday = models.DateField()

    athleteurl = models.CharField(max_length=30)              # Must limit 
to a-z && A-Z && and 0-9 chars

    athletecommunities = models.ManyToManyField('communities.Community')

    athletecolleges = models.ManyToManyField('colleges.College')

    

    User.profile = property(lambda u: 
Athlete.objects.get_or_create(athleteuser=u)[0])


    def __unicode__(self):

        return self.athleteuser.first_name + " " + 
self.athleteuser.last_name


The relevant parts of my template for editprofile, just simply showing the 
form is all:


                    <form action="" method="post">{% csrf_token %}

                    {% for field in AthleteProfileUpdateForm %}

                    {{ field.label }}

                    {{ field }}

                    {{ field.error }}

                    <p>

                    {% endfor %}


                    <input type="submit" alt="post" value="Update" />

                    </form>



As you can see from the pictures, when I do athleteprofile = 
AthleteProfileUpdateForm(instance = profile) in my view in the picture 
named "showingcommunities" you can see there is this little box that has 
greyed out some community names. This is great and occurs when this line 
 "athletecommunities = forms.MultipleChoiceField(label=(u'Athlete 
Communities:'), widget=forms.CheckboxSelectMultiple, required=False, 
choices=ATHLETECOMMUNITIESCHOICES)" is commented out in my update athlete 
profile form. I was really optimistic when I saw this as I could see that 
indeed I was rendering which communities the user is actually in. However, 
when I add this following line back to my forms "athletecommunities = 
forms.MultipleChoiceField(label=(u'Athlete Communities:'), 
widget=forms.CheckboxSelectMultiple, required=False, 
choices=ATHLETECOMMUNITIESCHOICES)" you would see the second picture 
"notshowingcommunities" because basically there are the checkboxes but the 
ones the user is actually in are not rendering. What I mean is the 
checkboxes that correspond to what communities the user selected do not 
show up as checked. They all show up as empty.

I have used a BooleanField before as a flag and it does hold its value, I 
can see the checked box in i.e. an edit form if on creation of that object 
the user checks the box. I would really hate to have to make about 20 
boolean fields for an athlete to correspond to my communities. Not to 
mention every time I want to add a community I would have to add more 
fields on the model, when I'd prefer to just add to my 
ATHLETECOMMUNITIESCHOICES the new communities. I've been trying a lot but I 
really can't seem to find a resource that helps me simply just render what 
options were selected on this multiplechoicefield, I tried 
modelmultiplechoicefield as well.

Thanks for helping, also if you have a better and nicer form concept I can 
try please let me know. Even though these checkboxes could work I'm not 
super satisfied with how this looks, I'd have to think up more ideas 
probably because I don't usually build websites that require an interface 
with a large relationship such as my athlete being in multiple communities 
and selecting and deselecting.

JJ


-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to django-users+unsubscr...@googlegroups.com.
To post to this group, send email to django-users@googlegroups.com.
Visit this group at http://groups.google.com/group/django-users.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-users/e82ced3f-c971-44c7-9317-a7afa9ac0b8c%40googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to