Port to new django version - not yet fully working

- location field makes problems
This commit is contained in:
Martin Bauer
2019-01-05 11:27:15 +01:00
parent 72a9642a8e
commit 663185fd40
168 changed files with 797 additions and 5967 deletions

View File

@@ -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)

View File

@@ -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']

View File

@@ -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

View File

@@ -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),
]

View File

@@ -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})