<https://lh4.googleusercontent.com/-ptmCr77cQSM/UpLdp8n25lI/AAAAAAAAAAU/6jlKqpKh6xs/s1600/notshowingcommunities.png>

<https://lh6.googleusercontent.com/-jB1ZKlyj_nQ/UpLdrkmVNmI/AAAAAAAAAAc/9vB-kCQeG4A/s1600/notshowingcommunities2.png>

<https://lh6.googleusercontent.com/-gtI-eaBolhc/UpLdm7GcUOI/AAAAAAAAAAM/TRLzmzDMFjY/s1600/showingcommunities.png>
I was so focused on posting the code I forgot to attach the pictures, now 
I'm putting them in.

On Monday, November 25, 2013 12:13:57 AM UTC-5, JJ Zolper wrote:
>
> 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/c1ff7e4e-59ee-4056-b4ed-c8812fa1abdd%40googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to