Merge lp:~mhall119/loco-team-portal/618602 into lp:loco-team-portal

Proposed by Michael Hall on 2010-11-27
Status: Merged
Approved by: Chris Johnston on 2010-11-27
Approved revision: 329
Merged at revision: 333
Proposed branch: lp:~mhall119/loco-team-portal/618602
Merge into: lp:loco-team-portal
Diff against target: 201 lines (+174/-0)
3 files modified
loco_directory/events/migrations/0005_allow_external_registration.py (+166/-0)
loco_directory/events/models.py (+2/-0)
loco_directory/templates/events/team_event_detail.inc.html (+6/-0)
To merge this branch: bzr merge lp:~mhall119/loco-team-portal/618602
Reviewer Review Type Date Requested Status
Chris Johnston 2010-11-27 Approve on 2010-11-27
Review via email: mp+41994@code.launchpad.net
To post a comment you must log in.
Chris Johnston (cjohnston) wrote :

Environment:

Request Method: POST
Request URL: http://127.0.0.1:8000/events/team/ubuntu-us-florida/add/
Django Version: 1.2.3
Python Version: 2.6.6
Installed Applications:
['django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.admin',
 'common',
 'teams',
 'venues',
 'events',
 'userprofiles',
 'django_openid_auth',
 'south']
Installed Middleware:
('django.middleware.common.CommonMiddleware',
 'django.middleware.locale.LocaleMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware')

Traceback:
File "/usr/lib/pymodules/python2.6/django/core/handlers/base.py" in get_response
  100. response = callback(request, *callback_args, **callback_kwargs)
File "/usr/lib/pymodules/python2.6/django/contrib/auth/decorators.py" in _wrapped_view
  25. return view_func(request, *args, **kwargs)
File "/home/chris/Dropbox/Projects/loco-directory/trunk/loco_directory/events/views.py" in team_event_new
  201. if form.is_valid():
File "/usr/lib/pymodules/python2.6/django/forms/forms.py" in is_valid
  121. return self.is_bound and not bool(self.errors)
File "/usr/lib/pymodules/python2.6/django/forms/forms.py" in _get_errors
  112. self.full_clean()
File "/usr/lib/pymodules/python2.6/django/forms/forms.py" in full_clean
  268. self._clean_form()
File "/usr/lib/pymodules/python2.6/django/forms/forms.py" in _clean_form
  296. self.cleaned_data = self.clean()
File "/home/chris/Dropbox/Projects/loco-directory/trunk/loco_directory/events/forms.py" in clean
  77. self.cleaned_data['date_begin'] = venue.fromlocaltime(begin)

Exception Type: AttributeError at /events/team/ubuntu-us-florida/add/
Exception Value: 'NoneType' object has no attribute 'fromlocaltime'

review: Needs Fixing
Chris Johnston (cjohnston) wrote :

Looks great

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== added file 'loco_directory/events/migrations/0005_allow_external_registration.py'
2--- loco_directory/events/migrations/0005_allow_external_registration.py 1970-01-01 00:00:00 +0000
3+++ loco_directory/events/migrations/0005_allow_external_registration.py 2010-11-27 04:09:53 +0000
4@@ -0,0 +1,166 @@
5+
6+from south.db import db
7+from django.db import models
8+from events.models import *
9+
10+class Migration:
11+
12+ def forwards(self, orm):
13+
14+ # Adding field 'TeamEvent.registration'
15+ db.add_column('events_teamevent', 'registration', orm['events.teamevent:registration'])
16+
17+
18+ def backwards(self, orm):
19+
20+ # Deleting field 'TeamEvent.registration'
21+ db.delete_column('events_teamevent', 'registration')
22+
23+
24+
25+
26+ models = {
27+ 'auth.group': {
28+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
29+ 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
30+ 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
31+ },
32+ 'auth.permission': {
33+ 'Meta': {'unique_together': "(('content_type', 'codename'),)"},
34+ 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
35+ 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
36+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
37+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
38+ },
39+ 'auth.user': {
40+ 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
41+ 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
42+ 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
43+ 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
44+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
45+ 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'}),
46+ 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
47+ 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
48+ 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
49+ 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
50+ 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
51+ 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
52+ 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
53+ },
54+ 'contenttypes.contenttype': {
55+ 'Meta': {'unique_together': "(('app_label', 'model'),)", 'db_table': "'django_content_type'"},
56+ 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
57+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
58+ 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
59+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
60+ },
61+ 'events.attendee': {
62+ 'Meta': {'unique_together': "(('team_event', 'attendee_profile'),)"},
63+ 'attendee_profile': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['userprofiles.UserProfile']", 'null': 'True'}),
64+ 'guests': ('django.db.models.fields.PositiveSmallIntegerField', [], {}),
65+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
66+ 'promise': ('django.db.models.fields.CharField', [], {'max_length': '50'}),
67+ 'team_event': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['events.TeamEvent']"})
68+ },
69+ 'events.baseevent': {
70+ 'announce': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
71+ 'date_begin': ('django.db.models.fields.DateTimeField', [], {'db_index': 'True'}),
72+ 'date_created': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime(2010, 11, 27, 3, 51, 37, 209550)', 'db_index': 'True'}),
73+ 'date_end': ('django.db.models.fields.DateTimeField', [], {'db_index': 'True'}),
74+ 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
75+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
76+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'})
77+ },
78+ 'events.globalevent': {
79+ 'baseevent_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['events.BaseEvent']", 'unique': 'True', 'primary_key': 'True'}),
80+ 'microbloghashtag': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True', 'blank': 'True'}),
81+ 'pictag': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True', 'blank': 'True'})
82+ },
83+ 'events.teamevent': {
84+ 'baseevent_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['events.BaseEvent']", 'unique': 'True', 'primary_key': 'True'}),
85+ 'global_event': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['events.GlobalEvent']", 'null': 'True', 'blank': 'True'}),
86+ 'registration': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
87+ 'teams': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['teams.Team']", 'db_index': 'True', 'symmetrical': 'False'}),
88+ 'venue': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['venues.Venue']", 'null': 'True', 'blank': 'True'})
89+ },
90+ 'events.teameventcomment': {
91+ 'comment': ('django.db.models.fields.TextField', [], {'db_index': 'True'}),
92+ 'commenter_profile': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['userprofiles.UserProfile']", 'null': 'True'}),
93+ 'date_created': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime(2010, 11, 27, 3, 51, 37, 215508)', 'db_index': 'True'}),
94+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
95+ 'team_event': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['events.TeamEvent']"})
96+ },
97+ 'teams.continent': {
98+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
99+ 'name': ('django.db.models.fields.TextField', [], {'max_length': '50'})
100+ },
101+ 'teams.country': {
102+ 'continents': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['teams.Continent']", 'symmetrical': 'False'}),
103+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
104+ 'name': ('django.db.models.fields.TextField', [], {'max_length': '100'})
105+ },
106+ 'teams.language': {
107+ 'code': ('django.db.models.fields.CharField', [], {'max_length': '20', 'null': 'True'}),
108+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
109+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150', 'null': 'True'})
110+ },
111+ 'teams.team': {
112+ 'Meta': {'db_table': "'teams'"},
113+ 'active': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'}),
114+ 'admin_profiles': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['userprofiles.UserProfile']", 'symmetrical': 'False'}),
115+ 'approved': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
116+ 'approved_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
117+ 'city': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True', 'blank': 'True'}),
118+ 'contact_profiles': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['userprofiles.UserProfile']", 'symmetrical': 'False'}),
119+ 'countries': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['teams.Country']", 'symmetrical': 'False'}),
120+ 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'null': 'True', 'blank': 'True'}),
121+ 'expires_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
122+ 'flickr_id': ('django.db.models.fields.CharField', [], {'max_length': '20', 'null': 'True', 'blank': 'True'}),
123+ 'forum_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
124+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
125+ 'irc_chan': ('django.db.models.fields.CharField', [], {'max_length': '25', 'null': 'True', 'blank': 'True'}),
126+ 'languages': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['teams.Language']", 'symmetrical': 'False'}),
127+ 'lp_name': ('django.db.models.fields.CharField', [], {'max_length': '40', 'null': 'True'}),
128+ 'ml_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
129+ 'mugshot_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
130+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '80', 'null': 'True'}),
131+ 'owner_profile': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'owner'", 'null': 'True', 'to': "orm['userprofiles.UserProfile']"}),
132+ 'picasa_id': ('django.db.models.fields.CharField', [], {'max_length': '20', 'null': 'True', 'blank': 'True'}),
133+ 'pixie_id': ('django.db.models.fields.CharField', [], {'max_length': '20', 'null': 'True', 'blank': 'True'}),
134+ 'provides_support': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'}),
135+ 'spr': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True', 'blank': 'True'}),
136+ 'web_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
137+ 'wiki_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'})
138+ },
139+ 'userprofiles.userprofile': {
140+ 'aim': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
141+ 'blog': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
142+ 'facebook': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
143+ 'flickr': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
144+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
145+ 'identica': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
146+ 'irc': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
147+ 'picasa': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
148+ 'realname': ('django.db.models.fields.CharField', [], {'max_length': '150', 'blank': 'True'}),
149+ 'twitter': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
150+ 'tz': ('django.db.models.fields.CharField', [], {'default': "'UTC'", 'max_length': '32'}),
151+ 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'}),
152+ 'xmpp': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'})
153+ },
154+ 'venues.venue': {
155+ 'Meta': {'unique_together': "(('name', 'country', 'city'), ('longitude', 'latitude'))"},
156+ 'address': ('django.db.models.fields.CharField', [], {'max_length': '150', 'null': 'True', 'blank': 'True'}),
157+ 'city': ('django.db.models.fields.CharField', [], {'max_length': '150', 'null': 'True', 'blank': 'True'}),
158+ 'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
159+ 'country': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['teams.Country']", 'null': 'True'}),
160+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
161+ 'latitude': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}),
162+ 'longitude': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}),
163+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
164+ 'spr': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True', 'blank': 'True'}),
165+ 'tz': ('django.db.models.fields.CharField', [], {'default': "'UTC'", 'max_length': '32'}),
166+ 'venue_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'})
167+ }
168+ }
169+
170+ complete_apps = ['events']
171
172=== modified file 'loco_directory/events/models.py'
173--- loco_directory/events/models.py 2010-11-19 13:17:17 +0000
174+++ loco_directory/events/models.py 2010-11-27 04:09:53 +0000
175@@ -109,6 +109,8 @@
176 teams = models.ManyToManyField(Team, help_text=_('teams of this event.'), verbose_name=_('Teams Participating'), db_index=True)
177 global_event = models.ForeignKey(GlobalEvent, help_text=_('this team event is part of the selected global event'), verbose_name=_('Related Global Event'), blank=True, null=True)
178 venue = models.ForeignKey(Venue, help_text=_('Venue of the Event'), verbose_name=_('Event Venue'), blank=True, null=True)
179+ registration = models.URLField(verbose_name=_('Registration URL'), help_text=_('URL to register attendance (leave blank to use the built-in registration system)'), max_length=200, verify_exists=False, blank=True, null=True)
180+
181 def __unicode__(self):
182 return "%s %s %s" % (self.name, self.venue, self.date_begin or "")
183
184
185=== modified file 'loco_directory/templates/events/team_event_detail.inc.html'
186--- loco_directory/templates/events/team_event_detail.inc.html 2010-10-07 20:56:05 +0000
187+++ loco_directory/templates/events/team_event_detail.inc.html 2010-11-27 04:09:53 +0000
188@@ -17,7 +17,13 @@
189
190 <article class="main-content">
191 <h3>{% trans "Attendees" %}</h3>
192+ {% if team_event_object.registration %}
193+ <p>
194+ <a href="{{team_event_object.registration}}" target="external_registration">{% trans 'Register for this Event' %}</a>
195+ </p>
196+ {% else %}
197 {% include "events/team_event_detail_attendees.inc.html" %}
198+ {% endif %}
199 </article>
200
201 {% if team_event_object.teameventcomment_set.all %}

Subscribers

People subscribed via source and target branches