Revision 95a51cdc
b/snf-astakos-app/astakos/im/forms.py | ||
---|---|---|
529 | 529 |
yield (suffix, value) |
530 | 530 |
|
531 | 531 |
class AstakosGroupSearchForm(forms.Form): |
532 |
q = forms.CharField(max_length=200, label='') |
|
533 |
|
|
534 |
class MembershipCreationForm(forms.ModelForm): |
|
535 |
# TODO check not to hit the db |
|
536 |
group = forms.ModelChoiceField( |
|
537 |
queryset=AstakosGroup.objects.all(), |
|
538 |
widget=forms.HiddenInput() |
|
539 |
) |
|
540 |
person = forms.ModelChoiceField( |
|
541 |
queryset=AstakosUser.objects.all(), |
|
542 |
widget=forms.HiddenInput() |
|
543 |
) |
|
544 |
date_requested = forms.DateField( |
|
545 |
widget=forms.HiddenInput(), |
|
546 |
input_formats="%d/%m/%Y" |
|
547 |
) |
|
548 |
|
|
549 |
class Meta: |
|
550 |
model = Membership |
|
551 |
exclude = ('date_joined',) |
|
552 |
|
|
553 |
def __init__(self, *args, **kwargs): |
|
554 |
super(MembershipCreationForm, self).__init__(*args, **kwargs) |
|
532 |
q = forms.CharField(max_length=200, label='') |
b/snf-astakos-app/astakos/im/templates/im/astakosgroup_list.html | ||
---|---|---|
112 | 112 |
<td>Pending</td> |
113 | 113 |
{% else %} |
114 | 114 |
<td>Not member |
115 |
{% if join_forms %} |
|
116 |
|
|
117 | 115 |
<form action="{% url group_join o.id %}" method="post" class="link-like">{% csrf_token %} |
118 |
{% with join_forms|lookup:o.name as form %} |
|
119 |
{% include "im/form_render.html" %} |
|
120 |
{% endwith %} |
|
121 |
|
|
122 | 116 |
<input type="submit" value="JOIN GROUP" /> |
123 |
|
|
124 | 117 |
</form> |
125 | 118 |
</td> |
126 |
{% endif %} |
|
127 | 119 |
{% endif %} |
128 | 120 |
{% endif %} |
129 | 121 |
</tr> |
b/snf-astakos-app/astakos/im/views.py | ||
---|---|---|
704 | 704 |
|
705 | 705 |
@signed_terms_required |
706 | 706 |
@login_required |
707 |
def group_search(request, extra_context={}, **kwargs): |
|
708 |
join_forms = {} |
|
707 |
def group_search(request, extra_context=None, **kwargs): |
|
709 | 708 |
if request.method == 'GET': |
710 | 709 |
form = AstakosGroupSearchForm() |
711 | 710 |
else: |
... | ... | |
714 | 713 |
q = form.cleaned_data['q'].strip() |
715 | 714 |
q = URLField().to_python(q) |
716 | 715 |
queryset = AstakosGroup.objects.select_related().filter(name=q) |
717 |
f = MembershipCreationForm |
|
718 |
for g in queryset: |
|
719 |
join_forms[g.name] = f( |
|
720 |
dict( |
|
721 |
group=g, |
|
722 |
person=request.user, |
|
723 |
date_requested=datetime.now().strftime("%d/%m/%Y") |
|
724 |
) |
|
725 |
) |
|
726 | 716 |
return object_list( |
727 | 717 |
request, |
728 | 718 |
queryset, |
729 | 719 |
template_name='im/astakosgroup_list.html', |
730 | 720 |
extra_context=dict( |
731 | 721 |
form=form, |
732 |
is_search=True, |
|
733 |
join_forms=join_forms |
|
722 |
is_search=True |
|
734 | 723 |
) |
735 | 724 |
) |
736 | 725 |
return render_response( |
737 | 726 |
template='im/astakosgroup_list.html', |
738 | 727 |
form = form, |
739 |
context_instance=get_context(request) |
|
728 |
context_instance=get_context(request, extra_context)
|
|
740 | 729 |
) |
741 | 730 |
|
742 | 731 |
@signed_terms_required |
743 | 732 |
@login_required |
744 | 733 |
def group_join(request, group_id): |
745 |
return create_object( |
|
746 |
request, |
|
747 |
model=Membership, |
|
748 |
template_name='im/astakosgroup_list.html', |
|
734 |
m = Membership(group_id=group_id, |
|
735 |
person=request.user, |
|
736 |
date_requested=datetime.now() |
|
737 |
) |
|
738 |
try: |
|
739 |
m.save() |
|
749 | 740 |
post_save_redirect = reverse( |
750 | 741 |
'group_detail', |
751 | 742 |
kwargs=dict(group_id=group_id) |
752 | 743 |
) |
753 |
) |
|
744 |
return HttpResponseRedirect(post_save_redirect) |
|
745 |
except IntegrityError, e: |
|
746 |
logger.exception(e) |
|
747 |
msg = _('Failed to join group.') |
|
748 |
messages.error(request, msg) |
|
749 |
return group_search(request) |
|
754 | 750 |
|
755 | 751 |
@signed_terms_required |
756 | 752 |
@login_required |
Also available in: Unified diff