Port to new django version - not yet fully working
- location field makes problems
This commit is contained in:
@@ -2,37 +2,31 @@ 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
|
||||
|
||||
from eventplanner.admin import EventParticipationInline
|
||||
# from eventplanner.admin import EventParticipationInline
|
||||
|
||||
|
||||
# Define an inline admin descriptor for Musician model
|
||||
# which acts a bit like a singleton
|
||||
class MusicianInline( admin.StackedInline ):
|
||||
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, )
|
||||
|
||||
|
||||
# Define a new User admin
|
||||
class UserAdmin(UserAdmin):
|
||||
inlines = (MusicianInline,)
|
||||
|
||||
|
||||
class MusicianAdmin(admin.ModelAdmin):
|
||||
readonly_fields = ('user',)
|
||||
inlines = ( EventParticipationInline, )
|
||||
# inlines = ( EventParticipationInline, )
|
||||
model = Musician
|
||||
|
||||
|
||||
# Re-register UserAdmin
|
||||
admin.site.unregister( User )
|
||||
admin.site.unregister(User)
|
||||
admin.site.register(User, UserAdmin)
|
||||
|
||||
|
||||
admin.site.register( Musician, MusicianAdmin )
|
||||
|
||||
admin.site.register(Musician, MusicianAdmin)
|
||||
|
||||
@@ -1,92 +0,0 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
import datetime
|
||||
from south.db import db
|
||||
from south.v2 import SchemaMigration
|
||||
from django.db import models
|
||||
|
||||
|
||||
class Migration(SchemaMigration):
|
||||
|
||||
def forwards(self, orm):
|
||||
# Adding model 'Musician'
|
||||
db.create_table(u'musicians_musician', (
|
||||
(u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
|
||||
('user', self.gf('django.db.models.fields.related.OneToOneField')(to=orm['auth.User'], unique=True)),
|
||||
('image', self.gf('django.db.models.fields.files.ImageField')(max_length=100)),
|
||||
('small_image', self.gf('django.db.models.fields.files.ImageField')(max_length=100)),
|
||||
('instrument', self.gf('django.db.models.fields.CharField')(max_length=4, blank=True)),
|
||||
('birthday', self.gf('django.db.models.fields.DateField')(null=True)),
|
||||
('street', self.gf('django.db.models.fields.CharField')(max_length=80, blank=True)),
|
||||
('city', self.gf('django.db.models.fields.CharField')(max_length=40, blank=True)),
|
||||
('zip_code', self.gf('django.db.models.fields.IntegerField')(null=True)),
|
||||
('phone_home', self.gf('django.db.models.fields.CharField')(max_length=18, blank=True)),
|
||||
('phone_mobile', self.gf('django.db.models.fields.CharField')(max_length=18, blank=True)),
|
||||
('phone_work', self.gf('django.db.models.fields.CharField')(max_length=18, blank=True)),
|
||||
('position', self.gf('django.db.models.fields.IntegerField')(null=True)),
|
||||
('public_description', self.gf('django.db.models.fields.TextField')(blank=True)),
|
||||
))
|
||||
db.send_create_signal(u'musicians', ['Musician'])
|
||||
|
||||
|
||||
def backwards(self, orm):
|
||||
# Deleting model 'Musician'
|
||||
db.delete_table(u'musicians_musician')
|
||||
|
||||
|
||||
models = {
|
||||
u'auth.group': {
|
||||
'Meta': {'object_name': 'Group'},
|
||||
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
|
||||
'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
|
||||
},
|
||||
u'auth.permission': {
|
||||
'Meta': {'ordering': "(u'content_type__app_label', u'content_type__model', u'codename')", 'unique_together': "((u'content_type', u'codename'),)", 'object_name': 'Permission'},
|
||||
'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
|
||||
'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}),
|
||||
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
|
||||
},
|
||||
u'auth.user': {
|
||||
'Meta': {'object_name': 'User'},
|
||||
'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
|
||||
'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
|
||||
'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
|
||||
'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
|
||||
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
|
||||
'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
|
||||
'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
|
||||
'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
|
||||
'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
|
||||
'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
|
||||
'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
|
||||
'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
|
||||
},
|
||||
u'contenttypes.contenttype': {
|
||||
'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
|
||||
'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
|
||||
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
|
||||
},
|
||||
u'musicians.musician': {
|
||||
'Meta': {'object_name': 'Musician'},
|
||||
'birthday': ('django.db.models.fields.DateField', [], {'null': 'True'}),
|
||||
'city': ('django.db.models.fields.CharField', [], {'max_length': '40', 'blank': 'True'}),
|
||||
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'image': ('django.db.models.fields.files.ImageField', [], {'max_length': '100'}),
|
||||
'instrument': ('django.db.models.fields.CharField', [], {'max_length': '4', 'blank': 'True'}),
|
||||
'phone_home': ('django.db.models.fields.CharField', [], {'max_length': '18', 'blank': 'True'}),
|
||||
'phone_mobile': ('django.db.models.fields.CharField', [], {'max_length': '18', 'blank': 'True'}),
|
||||
'phone_work': ('django.db.models.fields.CharField', [], {'max_length': '18', 'blank': 'True'}),
|
||||
'position': ('django.db.models.fields.IntegerField', [], {'null': 'True'}),
|
||||
'public_description': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
|
||||
'small_image': ('django.db.models.fields.files.ImageField', [], {'max_length': '100'}),
|
||||
'street': ('django.db.models.fields.CharField', [], {'max_length': '80', 'blank': 'True'}),
|
||||
'user': ('django.db.models.fields.related.OneToOneField', [], {'to': u"orm['auth.User']", 'unique': 'True'}),
|
||||
'zip_code': ('django.db.models.fields.IntegerField', [], {'null': 'True'})
|
||||
}
|
||||
}
|
||||
|
||||
complete_apps = ['musicians']
|
||||
@@ -5,55 +5,54 @@ from django.utils.translation import ugettext as _
|
||||
import os
|
||||
|
||||
INSTRUMENTS = (
|
||||
('TR', _('Trumpet') ),
|
||||
('TRB', _('Trombone') ),
|
||||
('HRN',_('Horn') ),
|
||||
('TUBA',_('Tuba') )
|
||||
('TR', _('Trumpet')),
|
||||
('TRB', _('Trombone')),
|
||||
('HRN', _('Horn')),
|
||||
('TUBA', _('Tuba'))
|
||||
)
|
||||
|
||||
|
||||
def musicianPictureName( musician, originalName ):
|
||||
|
||||
def musicianPictureName(musician, originalName):
|
||||
fileExtension = os.path.splitext(originalName)[1]
|
||||
return "user_images/" + musician.user.username + fileExtension
|
||||
|
||||
def musicianSmallPictureName( musician, originalName ):
|
||||
|
||||
def musicianSmallPictureName(musician, originalName):
|
||||
fileExtension = os.path.splitext(originalName)[1]
|
||||
return "user_images/" + musician.user.username + "_thumb" + fileExtension
|
||||
|
||||
|
||||
class Musician( models.Model ):
|
||||
class Musician(models.Model):
|
||||
# Link to user object, contains first name and last name
|
||||
user = models.OneToOneField( User, verbose_name=_("user") )
|
||||
|
||||
image = models.ImageField( upload_to = musicianPictureName, verbose_name=_("image") )
|
||||
small_image = models.ImageField( upload_to = musicianSmallPictureName, verbose_name = _("circular thumbnail") )
|
||||
|
||||
user = models.OneToOneField(User, verbose_name=_("user"), on_delete=models.CASCADE)
|
||||
|
||||
image = models.ImageField(upload_to=musicianPictureName, verbose_name=_("image"))
|
||||
small_image = models.ImageField(upload_to=musicianSmallPictureName, verbose_name=_("circular thumbnail"))
|
||||
|
||||
# Properties
|
||||
instrument = models.CharField( max_length=4, choices=INSTRUMENTS, blank=True, verbose_name=_("instrument") )
|
||||
|
||||
birthday = models.DateField( null=True, verbose_name=_("birthday") )
|
||||
|
||||
street = models.CharField( max_length=80, blank=True, verbose_name=_("street") )
|
||||
city = models.CharField( max_length=40, blank=True, verbose_name=_("city") )
|
||||
zip_code = models.IntegerField( null=True, verbose_name=_("zip_code") )
|
||||
|
||||
phone_home = models.CharField( max_length=18, blank=True, verbose_name=_("phone_home") )
|
||||
phone_mobile = models.CharField( max_length=18, blank=True, verbose_name=_("phone_mobile") )
|
||||
phone_work = models.CharField( max_length=18, blank=True, verbose_name=_("phone_work") )
|
||||
|
||||
position = models.IntegerField( null=True, verbose_name=_("Position") )
|
||||
|
||||
public_description = models.TextField( blank=True, verbose_name=_("public_description") )
|
||||
instrument = models.CharField(max_length=4, choices=INSTRUMENTS, blank=True, verbose_name=_("instrument"))
|
||||
|
||||
birthday = models.DateField(null=True, verbose_name=_("birthday"))
|
||||
|
||||
street = models.CharField(max_length=80, blank=True, verbose_name=_("street"))
|
||||
city = models.CharField(max_length=40, blank=True, verbose_name=_("city"))
|
||||
zip_code = models.IntegerField(null=True, verbose_name=_("zip_code"))
|
||||
|
||||
phone_home = models.CharField(max_length=18, blank=True, verbose_name=_("phone_home"))
|
||||
phone_mobile = models.CharField(max_length=18, blank=True, verbose_name=_("phone_mobile"))
|
||||
phone_work = models.CharField(max_length=18, blank=True, verbose_name=_("phone_work"))
|
||||
|
||||
position = models.IntegerField(null=True, verbose_name=_("Position"))
|
||||
|
||||
public_description = models.TextField(blank=True, verbose_name=_("public_description"))
|
||||
|
||||
@property
|
||||
def isDeepBrass(self):
|
||||
return self.instrument == 'TRB' or self.instrument == "EUPH" or self.instrument == "TUBA" or self.instrument == "HRN"
|
||||
|
||||
|
||||
@property
|
||||
def isHighBrass(self):
|
||||
return self.instrument == 'TR'
|
||||
|
||||
|
||||
def __unicode__( self ):
|
||||
|
||||
def __unicode__(self):
|
||||
return self.user.username
|
||||
|
||||
@@ -1,14 +1,12 @@
|
||||
from django.conf.urls import patterns, url
|
||||
from django.conf.urls import url
|
||||
|
||||
import musicians.views
|
||||
|
||||
|
||||
urlpatterns = patterns('',
|
||||
url(r'^$', musicians.views.addressbook ),
|
||||
url(r'^profile$', musicians.views.own_profile ),
|
||||
url(r'^changePassword/$', musicians.views.change_password ),
|
||||
url(r'^login/$', musicians.views.login_view),
|
||||
url(r'^login/usernames$', musicians.views.userlistForAutocompletion),
|
||||
url(r'^logout/$', musicians.views.logout_view),
|
||||
)
|
||||
|
||||
urlpatterns = [
|
||||
url(r'^$', musicians.views.addressbook),
|
||||
url(r'^profile$', musicians.views.own_profile),
|
||||
url(r'^changePassword/$', musicians.views.change_password),
|
||||
url(r'^login/$', musicians.views.login_view),
|
||||
url(r'^login/usernames$', musicians.views.userlistForAutocompletion),
|
||||
url(r'^logout/$', musicians.views.logout_view),
|
||||
]
|
||||
|
||||
@@ -1,155 +1,146 @@
|
||||
|
||||
from django.views.generic.edit import UpdateView
|
||||
from django.views.generic import ListView
|
||||
from musicians.models import Musician
|
||||
from musicians.models import Musician
|
||||
from django import forms
|
||||
from django.http import HttpResponseRedirect
|
||||
from django.shortcuts import render
|
||||
from django.shortcuts import get_object_or_404
|
||||
|
||||
|
||||
class MusicianList( ListView):
|
||||
class MusicianList(ListView):
|
||||
model = Musician
|
||||
|
||||
|
||||
class UserEditForm( forms.ModelForm ):
|
||||
|
||||
email = forms.EmailField()
|
||||
|
||||
class UserEditForm(forms.ModelForm):
|
||||
email = forms.EmailField()
|
||||
|
||||
def __init__(self, *args, **kw):
|
||||
|
||||
|
||||
if 'instance' in kw.keys():
|
||||
user = kw['instance'].user
|
||||
initVals = { 'email': user.email }
|
||||
if not 'initial' in kw.keys():
|
||||
initVals = {'email': user.email}
|
||||
if not 'initial' in kw.keys():
|
||||
kw['initial'] = initVals
|
||||
else:
|
||||
kw['initial'].update(initVals)
|
||||
|
||||
super(UserEditForm, self).__init__( *args, **kw )
|
||||
|
||||
|
||||
super(UserEditForm, self).__init__(*args, **kw)
|
||||
|
||||
self.fields.keyOrder.remove('email')
|
||||
|
||||
self.fields.keyOrder.insert(2, 'email')
|
||||
|
||||
self.fields.keyOrder.insert(2, 'email')
|
||||
|
||||
def save(self):
|
||||
if self.is_valid():
|
||||
super(UserEditForm,self).save()
|
||||
self.instance.user.email = self.cleaned_data['email']
|
||||
super(UserEditForm, self).save()
|
||||
self.instance.user.email = self.cleaned_data['email']
|
||||
self.instance.user.save()
|
||||
|
||||
|
||||
class Meta:
|
||||
model = Musician
|
||||
exclude = [ 'user','image', 'small_image', 'instrument', 'position', 'public_description' ]
|
||||
#fields = '__all__'
|
||||
model = Musician
|
||||
exclude = ['user', 'image', 'small_image', 'instrument', 'position', 'public_description']
|
||||
# fields = '__all__'
|
||||
|
||||
|
||||
def own_profile( request ):
|
||||
return user_edit( request, request.user )
|
||||
|
||||
def own_profile(request):
|
||||
return user_edit(request, request.user)
|
||||
|
||||
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
|
||||
|
||||
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
|
||||
if form.is_valid(): # All validation rules pass
|
||||
form.save()
|
||||
return HttpResponseRedirect('/') # Redirect after POST
|
||||
return HttpResponseRedirect('/') # Redirect after POST
|
||||
else:
|
||||
form = UserEditForm( instance= musician )
|
||||
form = UserEditForm(instance=musician)
|
||||
|
||||
return render(request, 'musicians/musician_edit.html', { 'form': form, 'musician': musician } )
|
||||
|
||||
return render(request, 'musicians/musician_edit.html', {'form': form, 'musician': musician})
|
||||
|
||||
|
||||
class MusicianUpdate( UpdateView ):
|
||||
class MusicianUpdate(UpdateView):
|
||||
model = Musician
|
||||
#fields = []
|
||||
# fields = []
|
||||
template_name = "musicians/musician_edit.html"
|
||||
success_url = '/books/'
|
||||
|
||||
|
||||
def addressbook( request ):
|
||||
|
||||
|
||||
def addressbook(request):
|
||||
context = dict()
|
||||
context['musicians'] = Musician.objects.all().order_by('user__first_name')
|
||||
|
||||
return render( request, 'musicians/addressbook.html', context )
|
||||
|
||||
|
||||
|
||||
return render(request, 'musicians/addressbook.html', context)
|
||||
|
||||
|
||||
############################################################################################################
|
||||
######################### User Management Views ############################################################
|
||||
############################################################################################################
|
||||
|
||||
from django.contrib.auth.views import password_change
|
||||
|
||||
from django.contrib.auth.views import PasswordChangeView
|
||||
from django.contrib.auth import authenticate, login, logout
|
||||
from django.shortcuts import redirect
|
||||
from django.http import HttpResponse
|
||||
from django.utils import simplejson
|
||||
import json
|
||||
from django.contrib.auth.models import User
|
||||
from datetime import timedelta
|
||||
|
||||
|
||||
def change_password( request ):
|
||||
return password_change(request, "musicians/change_password.html", post_change_redirect= "/" )
|
||||
|
||||
def change_password(request):
|
||||
return PasswordChangeView.as_view(request, "musicians/change_password.html", post_change_redirect="/")
|
||||
|
||||
|
||||
def logout_view(request):
|
||||
logout( request )
|
||||
return redirect( login_view )
|
||||
logout(request)
|
||||
return redirect(login_view)
|
||||
|
||||
|
||||
def userlistForAutocompletion(request):
|
||||
result = [ u.username for u in User.objects.all() ]
|
||||
return HttpResponse( simplejson.dumps(result), mimetype='application/json' )
|
||||
result = [u.username for u in User.objects.all()]
|
||||
return HttpResponse(json.dumps(result), content_type='application/json')
|
||||
|
||||
|
||||
def login_view( request ):
|
||||
if request.method == 'POST': # If the form has been submitted...
|
||||
raiseFirstLetter = lambda s: s[:1].upper() + s[1:] if s else ''
|
||||
username = raiseFirstLetter( request.POST['username'] )
|
||||
def login_view(request):
|
||||
if request.method == 'POST': # If the form has been submitted...
|
||||
raise_first_letter = lambda s: s[:1].upper() + s[1:] if s else ''
|
||||
username = raise_first_letter(request.POST['username'])
|
||||
password = request.POST['password']
|
||||
user = authenticate( username=username, password=password )
|
||||
user = authenticate(username=username, password=password)
|
||||
result = dict()
|
||||
result['err'] = ""
|
||||
if user is not None:
|
||||
if user.is_active:
|
||||
if not request.POST.get('remember', None):
|
||||
# Expire in one year
|
||||
request.session.set_expiry( timedelta( weeks=52 ) )
|
||||
request.session.set_expiry(timedelta(weeks=52).seconds)
|
||||
else:
|
||||
# Expire on browser close
|
||||
request.session.set_expiry( 0 )
|
||||
|
||||
request.session.set_expiry(0)
|
||||
|
||||
login(request, user)
|
||||
result['redirect'] = "/"
|
||||
print ( "Setting Redirect" )
|
||||
if 'next' in request.POST :
|
||||
print("Setting Redirect")
|
||||
if 'next' in request.POST:
|
||||
result['redirect'] = request.POST["next"]
|
||||
print ( "Using " + request.POST["next"] )
|
||||
print("Using " + request.POST["next"])
|
||||
else:
|
||||
result['err'] = "Dein Account wurde deaktiviert."
|
||||
# Return a 'disabled account' error message
|
||||
else:
|
||||
result['err'] = "Falscher Benutzername oder falsches Kennwort."
|
||||
|
||||
return HttpResponse( simplejson.dumps(result), mimetype='application/json' )
|
||||
|
||||
|
||||
return HttpResponse(json.dumps(result), content_type='application/json')
|
||||
|
||||
else:
|
||||
# Check if user already logged in
|
||||
if request.user.is_authenticated():
|
||||
return redirect( "/")
|
||||
|
||||
if request.user.is_authenticated:
|
||||
return redirect("/")
|
||||
|
||||
if 'next' in request.GET:
|
||||
nextPage = request.GET['next']
|
||||
else:
|
||||
nextPage = "/"
|
||||
return render( request, 'musicians/login.html', { 'next' : nextPage } )
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
return render(request, 'musicians/login.html', {'next': nextPage})
|
||||
|
||||
Reference in New Issue
Block a user