First checkin

This commit is contained in:
Martin Bauer
2013-05-28 15:20:06 +02:00
commit d29100a692
21 changed files with 9142 additions and 0 deletions

0
musicians/__init__.py Normal file
View File

29
musicians/admin.py Normal file
View File

@@ -0,0 +1,29 @@
from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
from django.contrib.auth.models import User
from django.utils.translation import ugettext as _
from musicians.models import Musician, PhoneNumber
class PhoneNumberInline( admin.TabularInline ):
model = PhoneNumber
extra = 3
# Define an inline admin descriptor for Musician model
# which acts a bit like a singleton
class MusicianInline( admin.StackedInline ):
model = Musician
can_delete = False
verbose_name_plural = _('musicians')
verbose_name = _('musician')
# Define a new User admin
class UserAdmin( UserAdmin ):
inlines = (MusicianInline, PhoneNumberInline )
# Re-register UserAdmin
admin.site.unregister( User )
admin.site.register(User, UserAdmin)

44
musicians/models.py Normal file
View File

@@ -0,0 +1,44 @@
from django.db import models
from django.contrib.auth.models import User
from django.utils.translation import ugettext as _
import os
INSTRUMENTS = (
('TR', _('Trumpet') ),
('TRB', _('Trombone') ),
('EUPH',_('Euphonium') ),
('TUBA',_('Tuba') )
)
class PhoneNumber( models.Model ):
user = models.OneToOneField( User )
desc = models.CharField( max_length=15 )
number = models.CharField( max_length=25 )
def musicianPictureName( musician, originalName ):
fileExtension = os.path.splitext(originalName)[1]
return "user_images/" + musician.user.username + fileExtension
class Musician( models.Model ):
# Link to user object, contains first name and last name
user = models.OneToOneField( User )
# Properties
image = models.ImageField( upload_to = musicianPictureName )
instrument = models.CharField( max_length=4, choices=INSTRUMENTS, blank=True )
birthday = models.DateField( null=True )
street = models.CharField( max_length=80, blank=True )
city = models.CharField( max_length=40, blank=True )
zip_code = models.IntegerField( null=True)
public_description = models.TextField( blank=True )

View File

@@ -0,0 +1,15 @@
{% extends "base.html" %}
{% load crispy_forms_tags %}
{% block content %}
{% crispy form %}
<!--
<form action="/musicians/martin" method="post">
{% csrf_token %}
{{ form.as_p|crispy }}
<input type="submit" value="Submit" />
</form> -->
{% endblock %}

View File

@@ -0,0 +1,10 @@
{% extends "base.html" %}
{% block content %}
<h2>Musicians</h2>
<ul>
{% for musician in object_list %}
<li>{{ musician.user.username }}</li>
{% endfor %}
</ul>
{% endblock %}

16
musicians/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)

104
musicians/views.py Normal file
View File

@@ -0,0 +1,104 @@
from django.views.generic.edit import UpdateView
from django.views.generic import ListView
from musicians.models import Musician
from django import forms
from django.http import HttpResponseRedirect
from django.http import HttpResponse
from django.shortcuts import render
from django.shortcuts import get_object_or_404
from crispy_forms.helper import FormHelper
from crispy_forms.layout import Submit
from crispy_forms.layout import Layout, Fieldset, ButtonHolder, Submit
class MusicianList( ListView):
model = Musician
class UserEditForm(forms.ModelForm):
first_name = forms.CharField( max_length = 60)
last_name = forms.CharField( max_length = 60)
email = forms.EmailField()
def __init__(self, *args, **kw):
if 'instance' in kw.keys():
user = kw['instance'].user
initVals = { 'first_name': user.first_name,
'last_name': user.last_name,
'email': user.email }
if not 'initial' in kw.keys():
kw['initial'] = initVals
else:
kw['initial'].update(initVals)
super(UserEditForm, self).__init__(*args, **kw)
self.helper = FormHelper()
self.helper.form_id = 'id-exampleForm'
self.helper.form_class = 'blueForms'
self.helper.form_method = 'post'
self.helper.form_action = '/musicians/martin' # TODO
self.helper.add_input(Submit('submit', 'Submit'))
self.helper.form_class = 'form-horizontal'
#self.helper.layout = Layout(
# Fieldset(
# 'Edit User',
# 'first_name',
# 'last_name',
# 'birthday',
# ),
#)
self.fields.keyOrder.remove('first_name')
self.fields.keyOrder.remove('last_name')
self.fields.keyOrder.remove('email')
self.fields.keyOrder.insert(0, 'first_name')
self.fields.keyOrder.insert(1, 'last_name')
self.fields.keyOrder.insert(2, 'email')
def save(self):
if self.is_valid():
super(UserEditForm,self).save()
self.instance.user.first_name = self.cleaned_data['first_name']
self.instance.user.last_name = self.cleaned_data['last_name']
self.instance.user.email = self.cleaned_data['email']
self.instance.user.save()
class Meta:
model = Musician
exclude = [ 'user','image' ]
#fields = '__all__'
def user_edit( request, username ):
musician = get_object_or_404(Musician, user__username=username )
if request.method == 'POST': # If the form has been submitted...
form = UserEditForm(request.POST) # A form bound to the POST data
form.instance = musician
if form.is_valid(): # All validation rules pass
form.save()
return HttpResponseRedirect('/musicians/' + username) # Redirect after POST
else:
form = UserEditForm( instance= musician )
return render(request, 'musicians/musician_edit.html', { 'form': form, } )
class MusicianUpdate( UpdateView ):
model = Musician
#fields = []
template_name = "musicians/musician_edit.html"
success_url = '/books/'