First mockup pages done

This commit is contained in:
Martin Bauer
2013-06-02 21:26:10 +02:00
parent af63d38236
commit 67822f39c4
14 changed files with 692 additions and 14 deletions

0
eventplanner/__init__.py Normal file
View File

20
eventplanner/admin.py Normal file
View File

@@ -0,0 +1,20 @@
from django.contrib import admin
from eventplanner.models import Event, EventParticipation
class EventParticipationInline(admin.TabularInline):
model = EventParticipation
extra = 1
readonly_fields = ('musician',)
fields = ( 'musician', 'status', 'comment', )
has_add_permission = lambda self, req : False
has_delete_permission = lambda self, req, obj : False
template = "custom_tabular.html"
class EventAdmin(admin.ModelAdmin):
inlines = ( EventParticipationInline, )
admin.site.register( Event, EventAdmin )

55
eventplanner/models.py Normal file
View File

@@ -0,0 +1,55 @@
from django.db import models
from django.utils.translation import ugettext as _
from locpick.field import LocationField
from musicians.models import Musician
class Event ( models.Model ):
EVENT_TYPES = (
( 'Reh', _('Rehearsal') ),
( 'Conc', _('Concert') ),
( 'GenReh', _('General Rehearsal') ),
)
title = models.CharField( max_length=40 )
type = models.CharField( max_length=6, choices=EVENT_TYPES, default='Reh' )
date = models.DateField()
time = models.TimeField( null=True, blank=True )
participants = models.ManyToManyField( Musician, through='EventParticipation' )
desc = models.TextField( blank=True)
location = LocationField()
def __unicode__(self):
return self.title + " ( " + self.get_type_display() + " ) "
def save(self, *args, **kwargs):
# Call the "real" save() method
super(Event, self).save(*args, **kwargs)
# Create a "Don't Know" participation for each Musician
for m in Musician.objects.all():
if not m in self.participants.all():
EventParticipation.objects.create( event=self, musician = m, status='?', comment = '' )
class EventParticipation( models.Model ):
OPTIONS = ( ('?' , _('?' )),
('Yes', _('Yes')),
('No' , _('No' ))
)
event = models.ForeignKey( Event )
musician = models.ForeignKey( Musician )
status = models.CharField ( max_length=3, choices = OPTIONS, default='?' )
comment = models.CharField ( max_length=64, blank=True )
class Meta:
unique_together = ("event", "musician")

View File

@@ -0,0 +1,78 @@
{% load i18n admin_static admin_modify %}
<div class="inline-group" id="{{ inline_admin_formset.formset.prefix }}-group">
<div class="tabular inline-related {% if forloop.last %}last-related{% endif %}">
{{ inline_admin_formset.formset.management_form }}
<fieldset class="module">
<h2>{{ inline_admin_formset.opts.verbose_name_plural|capfirst }}</h2>
{{ inline_admin_formset.formset.non_form_errors }}
<table>
<thead><tr>
{% for field in inline_admin_formset.fields %}
{% if not field.widget.is_hidden %}
<th{% if forloop.first %} colspan="2"{% endif %}{% if field.required %} class="required"{% endif %}>{{ field.label|capfirst }}
{% if field.help_text %}&nbsp;<img src="{% static "admin/img/icon-unknown.gif" %}" class="help help-tooltip" width="10" height="10" alt="({{ field.help_text|striptags }})" title="{{ field.help_text|striptags }}" />{% endif %}
</th>
{% endif %}
{% endfor %}
{% if inline_admin_formset.formset.can_delete %}<th>{% trans "Delete?" %}</th>{% endif %}
</tr></thead>
<tbody>
{% for inline_admin_form in inline_admin_formset %}
{% if inline_admin_form.form.non_field_errors %}
<tr><td colspan="{{ inline_admin_form|cell_count }}">{{ inline_admin_form.form.non_field_errors }}</td></tr>
{% endif %}
<tr class="form-row {% cycle "row1" "row2" %} {% if forloop.last %} empty-form{% endif %}"
id="{{ inline_admin_formset.formset.prefix }}-{% if not forloop.last %}{{ forloop.counter0 }}{% else %}empty{% endif %}">
<td class="original">
{% if inline_admin_form.original or inline_admin_form.show_url %}<p>
</p>{% endif %}
{% if inline_admin_form.has_auto_field %}{{ inline_admin_form.pk_field.field }}{% endif %}
{{ inline_admin_form.fk_field.field }}
{% spaceless %}
{% for fieldset in inline_admin_form %}
{% for line in fieldset %}
{% for field in line %}
{% if field.is_hidden %} {{ field.field }} {% endif %}
{% endfor %}
{% endfor %}
{% endfor %}
{% endspaceless %}
</td>
{% for fieldset in inline_admin_form %}
{% for line in fieldset %}
{% for field in line %}
<td{% if field.field.name %} class="field-{{ field.field.name }}"{% endif %}>
{% if field.is_readonly %}
<p>{{ field.contents|linebreaksbr }}</p>
{% else %}
{{ field.field.errors.as_ul }}
{{ field.field }}
{% endif %}
</td>
{% endfor %}
{% endfor %}
{% endfor %}
{% if inline_admin_formset.formset.can_delete %}
<td class="delete">{% if inline_admin_form.original %}{{ inline_admin_form.deletion_field.field }}{% endif %}</td>
{% endif %}
</tr>
{% endfor %}
</tbody>
</table>
</fieldset>
</div>
</div>
<script type="text/javascript">
(function($) {
$("#{{ inline_admin_formset.formset.prefix }}-group .tabular.inline-related tbody tr").tabularFormset({
prefix: "{{ inline_admin_formset.formset.prefix }}",
adminStaticPrefix: '{% static "admin/" %}',
addText: "{% blocktrans with inline_admin_formset.opts.verbose_name|title as verbose_name %}Add another {{ verbose_name }}{% endblocktrans %}",
deleteText: "{% trans 'Remove' %}"
});
})(django.jQuery);
</script>

16
eventplanner/tests.py Normal file
View File

@@ -0,0 +1,16 @@
"""
This file demonstrates writing tests using the unittest module. These will pass
when you run "manage.py test".
Replace this with more appropriate tests for your application.
"""
from django.test import TestCase
class SimpleTest(TestCase):
def test_basic_addition(self):
"""
Tests that 1 + 1 always equals 2.
"""
self.assertEqual(1 + 1, 2)

1
eventplanner/views.py Normal file
View File

@@ -0,0 +1 @@
# Create your views here.