added on_delete in models an migrations for django 2.0
compatibility.
This commit is contained in:
@@ -1,9 +1,9 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
from django.db import models, migrations
|
|
||||||
import django.db.models.deletion
|
import django.db.models.deletion
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
|
from django.db import models, migrations
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
class Migration(migrations.Migration):
|
||||||
@@ -44,7 +44,8 @@ class Migration(migrations.Migration):
|
|||||||
('date_modified', models.DateTimeField(
|
('date_modified', models.DateTimeField(
|
||||||
auto_now=True, verbose_name='Bearbeitet')),
|
auto_now=True, verbose_name='Bearbeitet')),
|
||||||
('author', models.ForeignKey(
|
('author', models.ForeignKey(
|
||||||
verbose_name='Autor', to=settings.AUTH_USER_MODEL)),
|
verbose_name='Autor', to=settings.AUTH_USER_MODEL,
|
||||||
|
on_delete=models.CASCADE))
|
||||||
],
|
],
|
||||||
options={
|
options={
|
||||||
'ordering': ('-date_created',),
|
'ordering': ('-date_created',),
|
||||||
@@ -144,7 +145,8 @@ class Migration(migrations.Migration):
|
|||||||
model_name='article',
|
model_name='article',
|
||||||
name='category',
|
name='category',
|
||||||
field=models.ForeignKey(
|
field=models.ForeignKey(
|
||||||
verbose_name='Kategorie', to='content.Category'),
|
verbose_name='Kategorie', to='content.Category',
|
||||||
|
on_delete=models.CASCADE),
|
||||||
),
|
),
|
||||||
migrations.AlterUniqueTogether(
|
migrations.AlterUniqueTogether(
|
||||||
name='page',
|
name='page',
|
||||||
|
|||||||
@@ -3,9 +3,9 @@ from ckeditor_uploader.fields import RichTextUploadingField
|
|||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.core.cache import cache
|
from django.core.cache import cache
|
||||||
from django.core.exceptions import ValidationError
|
from django.core.exceptions import ValidationError
|
||||||
from django.urls import reverse
|
|
||||||
from django.db import models
|
from django.db import models
|
||||||
from django.template.defaultfilters import slugify
|
from django.template.defaultfilters import slugify
|
||||||
|
from django.urls import reverse
|
||||||
from django.utils import timezone
|
from django.utils import timezone
|
||||||
from django.utils.safestring import mark_safe
|
from django.utils.safestring import mark_safe
|
||||||
from django.utils.translation import get_language, ugettext as _
|
from django.utils.translation import get_language, ugettext as _
|
||||||
@@ -69,11 +69,14 @@ class Article(models.Model):
|
|||||||
headline_en = models.CharField('Headline', max_length=255, blank=True)
|
headline_en = models.CharField('Headline', max_length=255, blank=True)
|
||||||
content_de = RichTextUploadingField(_('Content'))
|
content_de = RichTextUploadingField(_('Content'))
|
||||||
content_en = RichTextUploadingField('Content', blank=True)
|
content_en = RichTextUploadingField('Content', blank=True)
|
||||||
category = models.ForeignKey('Category', verbose_name=_('Category'))
|
category = models.ForeignKey('Category',
|
||||||
|
on_delete=models.PROTECT,
|
||||||
|
verbose_name=_('Category'))
|
||||||
image = models.ImageField(_('Image'), upload_to='news/',
|
image = models.ImageField(_('Image'), upload_to='news/',
|
||||||
blank=True, null=True)
|
blank=True, null=True)
|
||||||
slug = models.SlugField(_('Slug'), unique_for_month='date_created')
|
slug = models.SlugField(_('Slug'), unique_for_month='date_created')
|
||||||
author = models.ForeignKey(settings.AUTH_USER_MODEL,
|
author = models.ForeignKey(settings.AUTH_USER_MODEL,
|
||||||
|
on_delete=models.PROTECT,
|
||||||
verbose_name=_('Author'))
|
verbose_name=_('Author'))
|
||||||
status = models.SmallIntegerField(_('Status'), choices=STATUS_CHOICES,
|
status = models.SmallIntegerField(_('Status'), choices=STATUS_CHOICES,
|
||||||
default=STATUS_PUBLISHED)
|
default=STATUS_PUBLISHED)
|
||||||
@@ -275,12 +278,14 @@ class Page(models.Model):
|
|||||||
@property
|
@property
|
||||||
def description(self):
|
def description(self):
|
||||||
"""Return the localized description, fallback to german if necessary."""
|
"""Return the localized description, fallback to german if necessary."""
|
||||||
return getattr(self, "description_%s" % get_language()) or self.description_de
|
return getattr(self,
|
||||||
|
"description_%s" % get_language()) or self.description_de
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def menu_name(self):
|
def menu_name(self):
|
||||||
"""Return the localized menu name, fallback to german if necessary."""
|
"""Return the localized menu name, fallback to german if necessary."""
|
||||||
return getattr(self, "menu_name_%s" % get_language()) or self.menu_name_de
|
return getattr(self,
|
||||||
|
"menu_name_%s" % get_language()) or self.menu_name_de
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def pdf_file(self):
|
def pdf_file(self):
|
||||||
|
|||||||
@@ -1,14 +1,14 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
from django.db import models, migrations
|
|
||||||
import events.models
|
|
||||||
import django.db.models.deletion
|
import django.db.models.deletion
|
||||||
|
from django.db import models, migrations
|
||||||
|
|
||||||
|
import events.models
|
||||||
import utils
|
import utils
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
]
|
]
|
||||||
|
|
||||||
@@ -17,7 +17,8 @@ class Migration(migrations.Migration):
|
|||||||
name='Event',
|
name='Event',
|
||||||
fields=[
|
fields=[
|
||||||
('id', models.AutoField(verbose_name='ID',
|
('id', models.AutoField(verbose_name='ID',
|
||||||
serialize=False, auto_created=True, primary_key=True)),
|
serialize=False, auto_created=True,
|
||||||
|
primary_key=True)),
|
||||||
('name', models.CharField(max_length=255, verbose_name='Name')),
|
('name', models.CharField(max_length=255, verbose_name='Name')),
|
||||||
('description', models.TextField(
|
('description', models.TextField(
|
||||||
verbose_name='Beschreibung', blank=True)),
|
verbose_name='Beschreibung', blank=True)),
|
||||||
@@ -26,13 +27,20 @@ class Migration(migrations.Migration):
|
|||||||
null=True, verbose_name='Ende', blank=True)),
|
null=True, verbose_name='Ende', blank=True)),
|
||||||
('url', models.URLField(verbose_name='Homepage', blank=True)),
|
('url', models.URLField(verbose_name='Homepage', blank=True)),
|
||||||
('image', models.ImageField(storage=utils.OverwriteStorage(
|
('image', models.ImageField(storage=utils.OverwriteStorage(
|
||||||
), upload_to=events.models.get_upload_path, null=True, verbose_name='Bild', blank=True)),
|
), upload_to=events.models.get_upload_path, null=True,
|
||||||
|
verbose_name='Bild', blank=True)),
|
||||||
('is_tournament', models.BooleanField(default=False,
|
('is_tournament', models.BooleanField(default=False,
|
||||||
help_text='Diese Veranstaltung ist ein Turnier, es gelten andere Regeln f\xfcr das Kyu Ranking.', verbose_name='Turnier')),
|
help_text='Diese Veranstaltung ist ein Turnier, es gelten andere Regeln f\xfcr das Kyu Ranking.',
|
||||||
|
verbose_name='Turnier')),
|
||||||
('photo_count', models.PositiveIntegerField(
|
('photo_count', models.PositiveIntegerField(
|
||||||
default=0, editable=False)),
|
default=0, editable=False)),
|
||||||
('event_series', models.ForeignKey(on_delete=django.db.models.deletion.SET_NULL, editable=False, to='events.Event', blank=True,
|
('event_series',
|
||||||
help_text='Wenn dieser Termin zu einer Veranstaltungsreihe geh\xf6rt werden Ort, Beschreibung, Bild und Homepage von dem hier angegebenen Event \xfcbernommen.', null=True, verbose_name='Veranstaltungsreihen')),
|
models.ForeignKey(on_delete=django.db.models.deletion.SET_NULL,
|
||||||
|
editable=False, to='events.Event',
|
||||||
|
blank=True,
|
||||||
|
help_text='Wenn dieser Termin zu einer Veranstaltungsreihe geh\xf6rt werden Ort, Beschreibung, Bild und Homepage von dem hier angegebenen Event \xfcbernommen.',
|
||||||
|
null=True,
|
||||||
|
verbose_name='Veranstaltungsreihen')),
|
||||||
],
|
],
|
||||||
options={
|
options={
|
||||||
'ordering': ('-start', '-end'),
|
'ordering': ('-start', '-end'),
|
||||||
@@ -44,20 +52,310 @@ class Migration(migrations.Migration):
|
|||||||
name='Location',
|
name='Location',
|
||||||
fields=[
|
fields=[
|
||||||
('id', models.AutoField(verbose_name='ID',
|
('id', models.AutoField(verbose_name='ID',
|
||||||
serialize=False, auto_created=True, primary_key=True)),
|
serialize=False, auto_created=True,
|
||||||
|
primary_key=True)),
|
||||||
('name', models.CharField(max_length=200, verbose_name='Name')),
|
('name', models.CharField(max_length=200, verbose_name='Name')),
|
||||||
('description', models.TextField(
|
('description', models.TextField(
|
||||||
verbose_name='Beschreibung', blank=True)),
|
verbose_name='Beschreibung', blank=True)),
|
||||||
('image', models.ImageField(storage=utils.OverwriteStorage(
|
('image', models.ImageField(storage=utils.OverwriteStorage(
|
||||||
), upload_to=events.models.get_upload_path, null=True, verbose_name='Bild', blank=True)),
|
), upload_to=events.models.get_upload_path, null=True,
|
||||||
|
verbose_name='Bild', blank=True)),
|
||||||
('url', models.URLField(verbose_name='Homepage', blank=True)),
|
('url', models.URLField(verbose_name='Homepage', blank=True)),
|
||||||
('postal_code', models.CharField(
|
('postal_code', models.CharField(
|
||||||
max_length=6, verbose_name='Postleitzahl')),
|
max_length=6, verbose_name='Postleitzahl')),
|
||||||
('street_address', models.CharField(
|
('street_address', models.CharField(
|
||||||
max_length=127, verbose_name='Stra\xdfe')),
|
max_length=127, verbose_name='Stra\xdfe')),
|
||||||
('locality', models.CharField(max_length=127, verbose_name='Ort')),
|
('locality',
|
||||||
('country', models.CharField(max_length=2, verbose_name='Land', choices=[(b'GB', 'Vereinigtes K\xf6nigreich'), (b'AF', 'Afghanistan'), (b'AX', 'Aland Islands'), (b'AL', 'Albanien'), (b'DZ', 'Algerien'), (b'AS', 'Amerikanisch-Samoa'), (b'AD', 'Andorra'), (b'AO', 'Angola'), (b'AI', 'Anguilla'), (b'AQ', 'Antarktika'), (b'AG', 'Antigua und Barbuda'), (b'AR', 'Argentinien'), (b'AM', 'Armenien'), (b'AW', 'Aruba'), (b'AU', 'Australien'), (b'AT', '\xd6sterreich'), (b'AZ', 'Aserbaidschan'), (b'BS', 'Bahamas'), (b'BH', 'Bahrein'), (b'BD', 'Bangladesch'), (b'BB', 'Barbados'), (b'BY', 'Wei\xdfrussland'), (b'BE', 'Belgien'), (b'BZ', 'Belize'), (b'BJ', 'Benin'), (b'BM', 'Bermuda'), (b'BT', 'Bhutan'), (b'BO', 'Bolivien'), (b'BA', 'Bosnien und Herzegowina'), (b'BW', 'Botswana'), (b'BV', 'Bouvet Island'), (b'BR', 'Brasilien'), (b'IO', 'British Indian Ocean Territory'), (b'BN', 'Brunei Darussalam'), (b'BG', 'Bulgarien'), (b'BF', 'Burkina Faso'), (b'BI', 'Burundi'), (b'KH', 'Kambodscha'), (b'CM', 'Kamerun'), (b'CA', 'Kanada'), (b'CV', 'Cape Verde'), (b'KY', 'Cayman Islands'), (b'CF', 'Zentralafrikanische Republik'), (b'TD', 'Tschad'), (b'CL', 'Chile'), (b'CN', 'China'), (b'CX', 'Christmas Island'), (b'CC', 'Cocos (Keeling) Islands'), (b'CO', 'Kolumbien'), (b'KM', 'Komoren'), (b'CG', 'Kongo'), (b'CD', 'Kongo, Demokratische Republik'), (b'CK', 'Cook-Inseln'), (b'CR', 'Costa Rica'), (b'CI', "Cote d'Ivoire"), (b'HR', 'Kroatien'), (b'CU', 'Kuba'), (b'CY', 'Zypern'), (b'CZ', 'Tschechische Republik'), (b'DK', 'D\xe4nemark'), (b'DJ', 'Dschibuti'), (b'DM', 'Dominica'), (b'DO', 'Dominikanische Republik'), (b'EC', 'Ecuador'), (b'EG', '\xc4gypten'), (b'SV', 'El Salvador'), (b'GQ', '\xc4quatorial-Guinea'), (b'ER', 'Eritrea'), (b'EE', 'Estland'), (b'ET', '\xc4thiopien'), (b'FK', 'Falklandinseln (Malvinas)'), (b'FO', 'F\xe4r\xf6er-Inseln'), (b'FJ', 'Fidschi'), (b'FI', 'Finnland'), (b'FR', 'Frankreich'), (b'GF', 'Franz\xf6sisch-Guayana'), (b'PF', 'Franz\xf6sisch-Polynesien'), (b'TF', 'Franz\xf6sisch S\xfcdliche Territorien'), (b'GA', 'Gabun'), (b'GM', 'Gambia'), (b'GE', 'Georgia'), (b'DE', 'Deutschland'), (b'GH', 'Ghana'), (b'GI', 'Gibraltar'), (b'GR', 'Griechenland'), (b'GL', 'Gr\xf6nland'), (b'GD', 'Grenada'), (b'GP', 'Guadeloupe'), (b'GU', 'Guam'), (b'GT', 'Guatemala'), (b'GG', 'Guernsey'), (b'GN', 'Guinea'), (b'GW', 'Guinea-Bissau'), (b'GY', 'Guyana'), (b'HT', 'Haiti'), (b'HM', 'Heard und McDonald Inseln'), (b'VA', 'Heiliger Stuhl (Vatikanstadt)'), (b'HN', 'Honduras'), (b'HK', 'Hongkong'), (b'HU', 'Ungarn'), (b'IS', 'Island'), (b'IN', 'Indien'), (b'ID', 'Indonesien'), (b'IR', 'Iran, Islamische Republik'), (b'IQ', 'Irak'), (b'IE', 'Irland'), (b'IM', 'Isle of Man'), (b'IL', 'Israel'), (b'IT', 'Italien'), (b'JM', 'Jamaika'), (b'JP', 'Japan'), (b'JE', 'Jersey'), (b'JO', 'Jordan'), (b'KZ', 'Kasachstan'), (b'KE', 'Kenia'), (b'KI', 'Kiribati'), (b'KP', 'Korea, Demokratische Volksrepublik'), (b'KR', 'Korea, Republik'), (b'KW', 'Kuwait'), (b'KG', 'Kirgisistan'), (b'LA', 'Lao Demokratischen Volksrepublik'), (b'LV', 'Lettland'), (b'LB', 'Libanon'), (
|
models.CharField(max_length=127, verbose_name='Ort')),
|
||||||
b'LS', 'Lesotho'), (b'LR', 'Liberia'), (b'LY', 'Libyen'), (b'LI', 'Liechtenstein'), (b'LT', 'Litauen'), (b'LU', 'Luxemburg'), (b'MO', 'Macao'), (b'MK', 'Mazedonien, die ehemalige jugoslawische Republik'), (b'MG', 'Madagaskar'), (b'MW', 'Malawi'), (b'MY', 'Malaysia'), (b'MV', 'Malediven'), (b'ML', 'Mali'), (b'MT', 'Malta'), (b'MH', 'Marshall Islands'), (b'MQ', 'Martinique'), (b'MR', 'Mauretanien'), (b'MU', 'Mauritius'), (b'YT', 'Mayotte'), (b'MX', 'Mexiko'), (b'FM', 'Mikronesien, F\xf6derierte Staaten von'), (b'MD', 'Moldawien'), (b'MC', 'Monaco'), (b'MN', 'Mongolei'), (b'ME', 'Montenegro'), (b'MS', 'Montserrat'), (b'MA', 'Marokko'), (b'MZ', 'Mosambik'), (b'MM', 'Myanmar'), (b'NA', 'Namibia'), (b'NR', 'Nauru'), (b'NP', 'Nepal'), (b'NL', 'Niederlande'), (b'AN', 'Niederl\xe4ndische Antillen'), (b'NC', 'Neukaledonien'), (b'NZ', 'New Zealand'), (b'NI', 'Nicaragua'), (b'NE', 'Niger'), (b'NG', 'Nigeria'), (b'NU', 'Niue'), (b'NF', 'Norfolk Island'), (b'MP', 'Northern Mariana Islands'), (b'NO', 'Norwegen'), (b'OM', 'Oman'), (b'PK', 'Pakistan'), (b'PW', 'Palau'), (b'PS', 'Pal\xe4stinensische Autonomiegebiete'), (b'PA', 'Panama'), (b'PG', 'Papua-Neuguinea'), (b'PY', 'Paraguay'), (b'PE', 'Peru'), (b'PH', 'Philippinen'), (b'PN', 'Pitcairn'), (b'PL', 'Polen'), (b'PT', 'Portugal'), (b'PR', 'Puerto Rico'), (b'QA', 'Katar'), (b'RE', 'Wiedervereinigung'), (b'RO', 'Rum\xe4nien'), (b'RU', 'Russischen F\xf6deration'), (b'RW', 'Ruanda'), (b'BL', 'Saint Barthelemy'), (b'SH', 'Saint Helena'), (b'KN', 'Saint Kitts und Nevis'), (b'LC', 'Santa Lucia'), (b'MF', 'Santa Martin'), (b'PM', 'Saint Pierre und Miquelon'), (b'VC', 'Saint Vincent und die Grenadinen'), (b'WS', 'Samoa'), (b'SM', 'San Marino'), (b'ST', 'Sao Tome und Principe'), (b'SA', 'Saudi-Arabien'), (b'SN', 'Senegal'), (b'RS', 'Serbien'), (b'SC', 'Seychellen'), (b'SL', 'Sierra Leone'), (b'SG', 'Singapur'), (b'SK', 'Slowakei'), (b'SI', 'Slowenien'), (b'SB', 'Salomon-Inseln'), (b'SO', 'Somalia'), (b'ZA', 'S\xfcdafrika'), (b'GS', 'S\xfcdgeorgien und die S\xfcdlichen Sandwichinseln'), (b'ES', 'Spanien'), (b'LK', 'Sri Lanka'), (b'SD', 'Sudan'), (b'SR', 'Suriname'), (b'SJ', 'Svalbard und Jan Mayen'), (b'SZ', 'Swaziland'), (b'SE', 'Schweden'), (b'CH', 'Schweiz'), (b'SY', 'Arabische Republik Syrien'), (b'TW', 'Taiwan, Province of China'), (b'TJ', 'Tadschikistan'), (b'TZ', 'Tansania, Vereinigte Republik'), (b'TH', 'Thailand'), (b'TL', 'Timor-Leste'), (b'TG', 'Togo'), (b'TK', 'Tokelau'), (b'TO', 'Tonga'), (b'TT', 'Trinidad und Tobago'), (b'TN', 'Tunesien'), (b'TR', 'T\xfcrkei'), (b'TM', 'Turkmenistan'), (b'TC', 'Turks-und Caicosinseln'), (b'TV', 'Tuvalu'), (b'UG', 'Uganda'), (b'UA', 'Ukraine'), (b'AE', 'Vereinigte Arabische Emirate'), (b'US', 'Vereinigte Staaten'), (b'UM', 'United States Minor Outlying Islands'), (b'UY', 'Uruguay'), (b'UZ', 'Usbekistan'), (b'VU', 'Vanuatu'), (b'VE', 'Venezuela'), (b'VN', 'Vietnam'), (b'VG', 'Virgin Islands, British'), (b'VI', 'Virgin Islands, US'), (b'WF', 'Wallis und Futuna'), (b'EH', 'Westsahara'), (b'YE', 'Jemen'), (b'ZM', 'Sambia'), (b'ZW', 'Zimbabwe')])),
|
('country', models.CharField(max_length=2, verbose_name='Land',
|
||||||
|
choices=[(b'GB',
|
||||||
|
'Vereinigtes K\xf6nigreich'),
|
||||||
|
(b'AF', 'Afghanistan'),
|
||||||
|
(b'AX', 'Aland Islands'),
|
||||||
|
(b'AL', 'Albanien'),
|
||||||
|
(b'DZ', 'Algerien'), (
|
||||||
|
b'AS',
|
||||||
|
'Amerikanisch-Samoa'),
|
||||||
|
(b'AD', 'Andorra'),
|
||||||
|
(b'AO', 'Angola'),
|
||||||
|
(b'AI', 'Anguilla'),
|
||||||
|
(b'AQ', 'Antarktika'), (
|
||||||
|
b'AG',
|
||||||
|
'Antigua und Barbuda'),
|
||||||
|
(b'AR', 'Argentinien'),
|
||||||
|
(b'AM', 'Armenien'),
|
||||||
|
(b'AW', 'Aruba'),
|
||||||
|
(b'AU', 'Australien'),
|
||||||
|
(b'AT', '\xd6sterreich'),
|
||||||
|
(b'AZ', 'Aserbaidschan'),
|
||||||
|
(b'BS', 'Bahamas'),
|
||||||
|
(b'BH', 'Bahrein'),
|
||||||
|
(b'BD', 'Bangladesch'),
|
||||||
|
(b'BB', 'Barbados'), (
|
||||||
|
b'BY',
|
||||||
|
'Wei\xdfrussland'),
|
||||||
|
(b'BE', 'Belgien'),
|
||||||
|
(b'BZ', 'Belize'),
|
||||||
|
(b'BJ', 'Benin'),
|
||||||
|
(b'BM', 'Bermuda'),
|
||||||
|
(b'BT', 'Bhutan'),
|
||||||
|
(b'BO', 'Bolivien'), (
|
||||||
|
b'BA',
|
||||||
|
'Bosnien und Herzegowina'),
|
||||||
|
(b'BW', 'Botswana'),
|
||||||
|
(b'BV', 'Bouvet Island'),
|
||||||
|
(b'BR', 'Brasilien'), (
|
||||||
|
b'IO',
|
||||||
|
'British Indian Ocean Territory'),
|
||||||
|
(b'BN',
|
||||||
|
'Brunei Darussalam'),
|
||||||
|
(b'BG', 'Bulgarien'),
|
||||||
|
(b'BF', 'Burkina Faso'),
|
||||||
|
(b'BI', 'Burundi'),
|
||||||
|
(b'KH', 'Kambodscha'),
|
||||||
|
(b'CM', 'Kamerun'),
|
||||||
|
(b'CA', 'Kanada'),
|
||||||
|
(b'CV', 'Cape Verde'),
|
||||||
|
(b'KY', 'Cayman Islands'),
|
||||||
|
(b'CF',
|
||||||
|
'Zentralafrikanische Republik'),
|
||||||
|
(b'TD', 'Tschad'),
|
||||||
|
(b'CL', 'Chile'),
|
||||||
|
(b'CN', 'China'), (b'CX',
|
||||||
|
'Christmas Island'),
|
||||||
|
(b'CC',
|
||||||
|
'Cocos (Keeling) Islands'),
|
||||||
|
(b'CO', 'Kolumbien'),
|
||||||
|
(b'KM', 'Komoren'),
|
||||||
|
(b'CG', 'Kongo'), (b'CD',
|
||||||
|
'Kongo, Demokratische Republik'),
|
||||||
|
(b'CK', 'Cook-Inseln'),
|
||||||
|
(b'CR', 'Costa Rica'),
|
||||||
|
(b'CI', "Cote d'Ivoire"),
|
||||||
|
(b'HR', 'Kroatien'),
|
||||||
|
(b'CU', 'Kuba'),
|
||||||
|
(b'CY', 'Zypern'), (b'CZ',
|
||||||
|
'Tschechische Republik'),
|
||||||
|
(b'DK', 'D\xe4nemark'),
|
||||||
|
(b'DJ', 'Dschibuti'),
|
||||||
|
(b'DM', 'Dominica'), (
|
||||||
|
b'DO',
|
||||||
|
'Dominikanische Republik'),
|
||||||
|
(b'EC', 'Ecuador'),
|
||||||
|
(b'EG', '\xc4gypten'),
|
||||||
|
(b'SV', 'El Salvador'), (
|
||||||
|
b'GQ',
|
||||||
|
'\xc4quatorial-Guinea'),
|
||||||
|
(b'ER', 'Eritrea'),
|
||||||
|
(b'EE', 'Estland'),
|
||||||
|
(b'ET', '\xc4thiopien'), (
|
||||||
|
b'FK',
|
||||||
|
'Falklandinseln (Malvinas)'),
|
||||||
|
(b'FO',
|
||||||
|
'F\xe4r\xf6er-Inseln'),
|
||||||
|
(b'FJ', 'Fidschi'),
|
||||||
|
(b'FI', 'Finnland'),
|
||||||
|
(b'FR', 'Frankreich'), (
|
||||||
|
b'GF',
|
||||||
|
'Franz\xf6sisch-Guayana'),
|
||||||
|
(b'PF',
|
||||||
|
'Franz\xf6sisch-Polynesien'),
|
||||||
|
(b'TF',
|
||||||
|
'Franz\xf6sisch S\xfcdliche Territorien'),
|
||||||
|
(b'GA', 'Gabun'),
|
||||||
|
(b'GM', 'Gambia'),
|
||||||
|
(b'GE', 'Georgia'),
|
||||||
|
(b'DE', 'Deutschland'),
|
||||||
|
(b'GH', 'Ghana'),
|
||||||
|
(b'GI', 'Gibraltar'),
|
||||||
|
(b'GR', 'Griechenland'),
|
||||||
|
(b'GL', 'Gr\xf6nland'),
|
||||||
|
(b'GD', 'Grenada'),
|
||||||
|
(b'GP', 'Guadeloupe'),
|
||||||
|
(b'GU', 'Guam'),
|
||||||
|
(b'GT', 'Guatemala'),
|
||||||
|
(b'GG', 'Guernsey'),
|
||||||
|
(b'GN', 'Guinea'),
|
||||||
|
(b'GW', 'Guinea-Bissau'),
|
||||||
|
(b'GY', 'Guyana'),
|
||||||
|
(b'HT', 'Haiti'), (b'HM',
|
||||||
|
'Heard und McDonald Inseln'),
|
||||||
|
(b'VA',
|
||||||
|
'Heiliger Stuhl (Vatikanstadt)'),
|
||||||
|
(b'HN', 'Honduras'),
|
||||||
|
(b'HK', 'Hongkong'),
|
||||||
|
(b'HU', 'Ungarn'),
|
||||||
|
(b'IS', 'Island'),
|
||||||
|
(b'IN', 'Indien'),
|
||||||
|
(b'ID', 'Indonesien'), (
|
||||||
|
b'IR',
|
||||||
|
'Iran, Islamische Republik'),
|
||||||
|
(b'IQ', 'Irak'),
|
||||||
|
(b'IE', 'Irland'),
|
||||||
|
(b'IM', 'Isle of Man'),
|
||||||
|
(b'IL', 'Israel'),
|
||||||
|
(b'IT', 'Italien'),
|
||||||
|
(b'JM', 'Jamaika'),
|
||||||
|
(b'JP', 'Japan'),
|
||||||
|
(b'JE', 'Jersey'),
|
||||||
|
(b'JO', 'Jordan'),
|
||||||
|
(b'KZ', 'Kasachstan'),
|
||||||
|
(b'KE', 'Kenia'),
|
||||||
|
(b'KI', 'Kiribati'), (
|
||||||
|
b'KP',
|
||||||
|
'Korea, Demokratische Volksrepublik'),
|
||||||
|
(
|
||||||
|
b'KR',
|
||||||
|
'Korea, Republik'),
|
||||||
|
(b'KW', 'Kuwait'),
|
||||||
|
(b'KG', 'Kirgisistan'), (
|
||||||
|
b'LA',
|
||||||
|
'Lao Demokratischen Volksrepublik'),
|
||||||
|
(b'LV', 'Lettland'),
|
||||||
|
(b'LB', 'Libanon'), (
|
||||||
|
b'LS', 'Lesotho'),
|
||||||
|
(b'LR', 'Liberia'),
|
||||||
|
(b'LY', 'Libyen'),
|
||||||
|
(b'LI', 'Liechtenstein'),
|
||||||
|
(b'LT', 'Litauen'),
|
||||||
|
(b'LU', 'Luxemburg'),
|
||||||
|
(b'MO', 'Macao'), (b'MK',
|
||||||
|
'Mazedonien, die ehemalige jugoslawische Republik'),
|
||||||
|
(b'MG', 'Madagaskar'),
|
||||||
|
(b'MW', 'Malawi'),
|
||||||
|
(b'MY', 'Malaysia'),
|
||||||
|
(b'MV', 'Malediven'),
|
||||||
|
(b'ML', 'Mali'),
|
||||||
|
(b'MT', 'Malta'), (b'MH',
|
||||||
|
'Marshall Islands'),
|
||||||
|
(b'MQ', 'Martinique'),
|
||||||
|
(b'MR', 'Mauretanien'),
|
||||||
|
(b'MU', 'Mauritius'),
|
||||||
|
(b'YT', 'Mayotte'),
|
||||||
|
(b'MX', 'Mexiko'), (b'FM',
|
||||||
|
'Mikronesien, F\xf6derierte Staaten von'),
|
||||||
|
(b'MD', 'Moldawien'),
|
||||||
|
(b'MC', 'Monaco'),
|
||||||
|
(b'MN', 'Mongolei'),
|
||||||
|
(b'ME', 'Montenegro'),
|
||||||
|
(b'MS', 'Montserrat'),
|
||||||
|
(b'MA', 'Marokko'),
|
||||||
|
(b'MZ', 'Mosambik'),
|
||||||
|
(b'MM', 'Myanmar'),
|
||||||
|
(b'NA', 'Namibia'),
|
||||||
|
(b'NR', 'Nauru'),
|
||||||
|
(b'NP', 'Nepal'),
|
||||||
|
(b'NL', 'Niederlande'), (
|
||||||
|
b'AN',
|
||||||
|
'Niederl\xe4ndische Antillen'),
|
||||||
|
(b'NC', 'Neukaledonien'),
|
||||||
|
(b'NZ', 'New Zealand'),
|
||||||
|
(b'NI', 'Nicaragua'),
|
||||||
|
(b'NE', 'Niger'),
|
||||||
|
(b'NG', 'Nigeria'),
|
||||||
|
(b'NU', 'Niue'),
|
||||||
|
(b'NF', 'Norfolk Island'),
|
||||||
|
(b'MP',
|
||||||
|
'Northern Mariana Islands'),
|
||||||
|
(b'NO', 'Norwegen'),
|
||||||
|
(b'OM', 'Oman'),
|
||||||
|
(b'PK', 'Pakistan'),
|
||||||
|
(b'PW', 'Palau'), (b'PS',
|
||||||
|
'Pal\xe4stinensische Autonomiegebiete'),
|
||||||
|
(b'PA', 'Panama'), (
|
||||||
|
b'PG',
|
||||||
|
'Papua-Neuguinea'),
|
||||||
|
(b'PY', 'Paraguay'),
|
||||||
|
(b'PE', 'Peru'),
|
||||||
|
(b'PH', 'Philippinen'),
|
||||||
|
(b'PN', 'Pitcairn'),
|
||||||
|
(b'PL', 'Polen'),
|
||||||
|
(b'PT', 'Portugal'),
|
||||||
|
(b'PR', 'Puerto Rico'),
|
||||||
|
(b'QA', 'Katar'), (b'RE',
|
||||||
|
'Wiedervereinigung'),
|
||||||
|
(b'RO', 'Rum\xe4nien'), (
|
||||||
|
b'RU',
|
||||||
|
'Russischen F\xf6deration'),
|
||||||
|
(b'RW', 'Ruanda'), (b'BL',
|
||||||
|
'Saint Barthelemy'),
|
||||||
|
(b'SH', 'Saint Helena'), (
|
||||||
|
b'KN',
|
||||||
|
'Saint Kitts und Nevis'),
|
||||||
|
(b'LC', 'Santa Lucia'),
|
||||||
|
(b'MF', 'Santa Martin'), (
|
||||||
|
b'PM',
|
||||||
|
'Saint Pierre und Miquelon'),
|
||||||
|
(b'VC',
|
||||||
|
'Saint Vincent und die Grenadinen'),
|
||||||
|
(b'WS', 'Samoa'),
|
||||||
|
(b'SM', 'San Marino'), (
|
||||||
|
b'ST',
|
||||||
|
'Sao Tome und Principe'),
|
||||||
|
(b'SA', 'Saudi-Arabien'),
|
||||||
|
(b'SN', 'Senegal'),
|
||||||
|
(b'RS', 'Serbien'),
|
||||||
|
(b'SC', 'Seychellen'),
|
||||||
|
(b'SL', 'Sierra Leone'),
|
||||||
|
(b'SG', 'Singapur'),
|
||||||
|
(b'SK', 'Slowakei'),
|
||||||
|
(b'SI', 'Slowenien'),
|
||||||
|
(b'SB', 'Salomon-Inseln'),
|
||||||
|
(b'SO', 'Somalia'),
|
||||||
|
(b'ZA', 'S\xfcdafrika'), (
|
||||||
|
b'GS',
|
||||||
|
'S\xfcdgeorgien und die S\xfcdlichen Sandwichinseln'),
|
||||||
|
(b'ES', 'Spanien'),
|
||||||
|
(b'LK', 'Sri Lanka'),
|
||||||
|
(b'SD', 'Sudan'),
|
||||||
|
(b'SR', 'Suriname'), (
|
||||||
|
b'SJ',
|
||||||
|
'Svalbard und Jan Mayen'),
|
||||||
|
(b'SZ', 'Swaziland'),
|
||||||
|
(b'SE', 'Schweden'),
|
||||||
|
(b'CH', 'Schweiz'), (
|
||||||
|
b'SY',
|
||||||
|
'Arabische Republik Syrien'),
|
||||||
|
(b'TW',
|
||||||
|
'Taiwan, Province of China'),
|
||||||
|
(b'TJ', 'Tadschikistan'),
|
||||||
|
(b'TZ',
|
||||||
|
'Tansania, Vereinigte Republik'),
|
||||||
|
(b'TH', 'Thailand'),
|
||||||
|
(b'TL', 'Timor-Leste'),
|
||||||
|
(b'TG', 'Togo'),
|
||||||
|
(b'TK', 'Tokelau'),
|
||||||
|
(b'TO', 'Tonga'), (b'TT',
|
||||||
|
'Trinidad und Tobago'),
|
||||||
|
(b'TN', 'Tunesien'),
|
||||||
|
(b'TR', 'T\xfcrkei'),
|
||||||
|
(b'TM', 'Turkmenistan'), (
|
||||||
|
b'TC',
|
||||||
|
'Turks-und Caicosinseln'),
|
||||||
|
(b'TV', 'Tuvalu'),
|
||||||
|
(b'UG', 'Uganda'),
|
||||||
|
(b'UA', 'Ukraine'), (
|
||||||
|
b'AE',
|
||||||
|
'Vereinigte Arabische Emirate'),
|
||||||
|
(b'US',
|
||||||
|
'Vereinigte Staaten'), (
|
||||||
|
b'UM',
|
||||||
|
'United States Minor Outlying Islands'),
|
||||||
|
(b'UY', 'Uruguay'),
|
||||||
|
(b'UZ', 'Usbekistan'),
|
||||||
|
(b'VU', 'Vanuatu'),
|
||||||
|
(b'VE', 'Venezuela'),
|
||||||
|
(b'VN', 'Vietnam'), (
|
||||||
|
b'VG',
|
||||||
|
'Virgin Islands, British'),
|
||||||
|
(b'VI',
|
||||||
|
'Virgin Islands, US'), (
|
||||||
|
b'WF',
|
||||||
|
'Wallis und Futuna'),
|
||||||
|
(b'EH', 'Westsahara'),
|
||||||
|
(b'YE', 'Jemen'),
|
||||||
|
(b'ZM', 'Sambia'),
|
||||||
|
(b'ZW', 'Zimbabwe')])),
|
||||||
],
|
],
|
||||||
options={
|
options={
|
||||||
'verbose_name': 'Veranstaltungsort',
|
'verbose_name': 'Veranstaltungsort',
|
||||||
@@ -67,6 +365,8 @@ class Migration(migrations.Migration):
|
|||||||
migrations.AddField(
|
migrations.AddField(
|
||||||
model_name='event',
|
model_name='event',
|
||||||
name='location',
|
name='location',
|
||||||
field=models.ForeignKey(to='events.Location'),
|
field=models.ForeignKey(
|
||||||
|
to='events.Location',
|
||||||
|
on_delete=models.CASCADE),
|
||||||
),
|
),
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -1,17 +1,17 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
from django.db import models, migrations
|
|
||||||
import ckeditor.fields
|
import ckeditor.fields
|
||||||
import events.models
|
|
||||||
import easy_thumbnails.fields
|
|
||||||
import django.db.models.deletion
|
import django.db.models.deletion
|
||||||
import utils
|
import easy_thumbnails.fields
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
|
from django.db import models, migrations
|
||||||
|
|
||||||
|
import events.models
|
||||||
|
import utils
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||||
('events', '0003_auto_20150823_2232'),
|
('events', '0003_auto_20150823_2232'),
|
||||||
@@ -22,18 +22,24 @@ class Migration(migrations.Migration):
|
|||||||
name='Photo',
|
name='Photo',
|
||||||
fields=[
|
fields=[
|
||||||
('id', models.AutoField(verbose_name='ID',
|
('id', models.AutoField(verbose_name='ID',
|
||||||
serialize=False, auto_created=True, primary_key=True)),
|
serialize=False, auto_created=True,
|
||||||
|
primary_key=True)),
|
||||||
('name', models.CharField(max_length=100,
|
('name', models.CharField(max_length=100,
|
||||||
verbose_name='Name', blank=True)),
|
verbose_name='Name', blank=True)),
|
||||||
('image', easy_thumbnails.fields.ThumbnailerImageField(
|
('image', easy_thumbnails.fields.ThumbnailerImageField(
|
||||||
upload_to=events.models.get_upload_path, storage=utils.OverwriteStorage(), verbose_name='Bild')),
|
upload_to=events.models.get_upload_path,
|
||||||
|
storage=utils.OverwriteStorage(), verbose_name='Bild')),
|
||||||
('description', models.TextField(max_length=300,
|
('description', models.TextField(max_length=300,
|
||||||
verbose_name='Beschreibung', blank=True)),
|
verbose_name='Beschreibung',
|
||||||
|
blank=True)),
|
||||||
('on_startpage', models.BooleanField(default=False,
|
('on_startpage', models.BooleanField(default=False,
|
||||||
help_text='Display this Photo on the Startpage Teaser', verbose_name='Startpage')),
|
help_text='Display this Photo on the Startpage Teaser',
|
||||||
('created_date', models.DateTimeField(verbose_name='Published on')),
|
verbose_name='Startpage')),
|
||||||
|
('created_date',
|
||||||
|
models.DateTimeField(verbose_name='Published on')),
|
||||||
('views', models.PositiveIntegerField(default=0,
|
('views', models.PositiveIntegerField(default=0,
|
||||||
verbose_name='Number of views', editable=False)),
|
verbose_name='Number of views',
|
||||||
|
editable=False)),
|
||||||
],
|
],
|
||||||
options={
|
options={
|
||||||
'ordering': ['created_date'],
|
'ordering': ['created_date'],
|
||||||
@@ -46,7 +52,8 @@ class Migration(migrations.Migration):
|
|||||||
migrations.AlterModelOptions(
|
migrations.AlterModelOptions(
|
||||||
name='event',
|
name='event',
|
||||||
options={'ordering': (
|
options={'ordering': (
|
||||||
'start', 'end'), 'verbose_name': 'Termin', 'verbose_name_plural': 'Termine'},
|
'start', 'end'), 'verbose_name': 'Termin',
|
||||||
|
'verbose_name_plural': 'Termine'},
|
||||||
),
|
),
|
||||||
migrations.AlterField(
|
migrations.AlterField(
|
||||||
model_name='event',
|
model_name='event',
|
||||||
@@ -57,14 +64,19 @@ class Migration(migrations.Migration):
|
|||||||
migrations.AlterField(
|
migrations.AlterField(
|
||||||
model_name='event',
|
model_name='event',
|
||||||
name='event_series',
|
name='event_series',
|
||||||
field=models.ForeignKey(on_delete=django.db.models.deletion.SET_NULL, blank=True, to='events.Event',
|
field=models.ForeignKey(
|
||||||
help_text='Wenn dieser Termin zu einer Veranstaltungsreihe geh\xf6rt werden Ort, Beschreibung, Bild und Homepage von dem hier angegebenen Event \xfcbernommen.', null=True, verbose_name='Veranstaltungsreihen'),
|
on_delete=django.db.models.deletion.SET_NULL, blank=True,
|
||||||
|
to='events.Event',
|
||||||
|
help_text='Wenn dieser Termin zu einer Veranstaltungsreihe geh\xf6rt werden Ort, Beschreibung, Bild und Homepage von dem hier angegebenen Event \xfcbernommen.',
|
||||||
|
null=True, verbose_name='Veranstaltungsreihen'),
|
||||||
),
|
),
|
||||||
migrations.AlterField(
|
migrations.AlterField(
|
||||||
model_name='event',
|
model_name='event',
|
||||||
name='image',
|
name='image',
|
||||||
field=easy_thumbnails.fields.ThumbnailerImageField(storage=utils.OverwriteStorage(
|
field=easy_thumbnails.fields.ThumbnailerImageField(
|
||||||
), upload_to=events.models.get_upload_path, null=True, verbose_name='Bild', blank=True),
|
storage=utils.OverwriteStorage(
|
||||||
|
), upload_to=events.models.get_upload_path, null=True,
|
||||||
|
verbose_name='Bild', blank=True),
|
||||||
),
|
),
|
||||||
migrations.AlterField(
|
migrations.AlterField(
|
||||||
model_name='location',
|
model_name='location',
|
||||||
@@ -75,17 +87,21 @@ class Migration(migrations.Migration):
|
|||||||
migrations.AlterField(
|
migrations.AlterField(
|
||||||
model_name='location',
|
model_name='location',
|
||||||
name='image',
|
name='image',
|
||||||
field=easy_thumbnails.fields.ThumbnailerImageField(storage=utils.OverwriteStorage(
|
field=easy_thumbnails.fields.ThumbnailerImageField(
|
||||||
), upload_to=events.models.get_upload_path, null=True, verbose_name='Bild', blank=True),
|
storage=utils.OverwriteStorage(
|
||||||
|
), upload_to=events.models.get_upload_path, null=True,
|
||||||
|
verbose_name='Bild', blank=True),
|
||||||
),
|
),
|
||||||
migrations.AddField(
|
migrations.AddField(
|
||||||
model_name='photo',
|
model_name='photo',
|
||||||
name='event',
|
name='event',
|
||||||
field=models.ForeignKey(to='events.Event'),
|
field=models.ForeignKey(
|
||||||
|
to='events.Event', on_delete=models.CASCADE),
|
||||||
),
|
),
|
||||||
migrations.AddField(
|
migrations.AddField(
|
||||||
model_name='photo',
|
model_name='photo',
|
||||||
name='photographer',
|
name='photographer',
|
||||||
field=models.ForeignKey(to=settings.AUTH_USER_MODEL),
|
field=models.ForeignKey(
|
||||||
|
to=settings.AUTH_USER_MODEL, on_delete=models.CASCADE),
|
||||||
),
|
),
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -4,10 +4,10 @@ import os
|
|||||||
from ckeditor.fields import RichTextField
|
from ckeditor.fields import RichTextField
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.core.exceptions import ValidationError
|
from django.core.exceptions import ValidationError
|
||||||
from django.urls import reverse
|
|
||||||
from django.db import models
|
from django.db import models
|
||||||
from django.db.models import Q
|
from django.db.models import Q
|
||||||
from django.template.defaultfilters import slugify
|
from django.template.defaultfilters import slugify
|
||||||
|
from django.urls import reverse
|
||||||
from django.utils.timezone import now
|
from django.utils.timezone import now
|
||||||
from django.utils.translation import ugettext as _
|
from django.utils.translation import ugettext as _
|
||||||
from easy_thumbnails.fields import ThumbnailerImageField
|
from easy_thumbnails.fields import ThumbnailerImageField
|
||||||
@@ -51,7 +51,7 @@ class Event(models.Model):
|
|||||||
"""An Event that could be a tournament, a game session, or an convention."""
|
"""An Event that could be a tournament, a game session, or an convention."""
|
||||||
name = models.CharField(_('Name'), max_length=255)
|
name = models.CharField(_('Name'), max_length=255)
|
||||||
description = RichTextField(_("Description"), blank=True)
|
description = RichTextField(_("Description"), blank=True)
|
||||||
location = models.ForeignKey('Location')
|
location = models.ForeignKey('Location', on_delete=models.PROTECT)
|
||||||
start = models.DateTimeField(_('Start'))
|
start = models.DateTimeField(_('Start'))
|
||||||
end = models.DateTimeField(_('End'), blank=True, null=True)
|
end = models.DateTimeField(_('End'), blank=True, null=True)
|
||||||
url = models.URLField(_('Homepage'), blank=True)
|
url = models.URLField(_('Homepage'), blank=True)
|
||||||
@@ -220,13 +220,14 @@ class Photo(models.Model):
|
|||||||
upload_to=get_upload_path,
|
upload_to=get_upload_path,
|
||||||
storage=OverwriteStorage()
|
storage=OverwriteStorage()
|
||||||
)
|
)
|
||||||
event = models.ForeignKey('events.Event')
|
event = models.ForeignKey('events.Event', on_delete=models.PROTECT, )
|
||||||
description = models.TextField(
|
description = models.TextField(
|
||||||
_("Description"),
|
_("Description"),
|
||||||
max_length=300,
|
max_length=300,
|
||||||
blank=True
|
blank=True
|
||||||
)
|
)
|
||||||
photographer = models.ForeignKey(settings.AUTH_USER_MODEL)
|
photographer = models.ForeignKey(settings.AUTH_USER_MODEL,
|
||||||
|
on_delete=models.PROTECT)
|
||||||
on_startpage = models.BooleanField(
|
on_startpage = models.BooleanField(
|
||||||
_("Startpage"),
|
_("Startpage"),
|
||||||
default=False,
|
default=False,
|
||||||
|
|||||||
@@ -1,12 +1,11 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
from django.db import models, migrations
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
|
from django.db import models, migrations
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||||
('events', '0005_auto_20150907_2021'),
|
('events', '0005_auto_20150907_2021'),
|
||||||
@@ -17,15 +16,19 @@ class Migration(migrations.Migration):
|
|||||||
name='EventRanking',
|
name='EventRanking',
|
||||||
fields=[
|
fields=[
|
||||||
('id', models.AutoField(verbose_name='ID',
|
('id', models.AutoField(verbose_name='ID',
|
||||||
serialize=False, auto_created=True, primary_key=True)),
|
serialize=False, auto_created=True,
|
||||||
('placement', models.PositiveIntegerField(null=True, blank=True)),
|
primary_key=True)),
|
||||||
|
('placement',
|
||||||
|
models.PositiveIntegerField(null=True, blank=True)),
|
||||||
('avg_placement', models.FloatField(default=4)),
|
('avg_placement', models.FloatField(default=4)),
|
||||||
('avg_score', models.FloatField(default=0)),
|
('avg_score', models.FloatField(default=0)),
|
||||||
('hanchan_count', models.PositiveIntegerField(default=0)),
|
('hanchan_count', models.PositiveIntegerField(default=0)),
|
||||||
('good_hanchans', models.PositiveIntegerField(default=0)),
|
('good_hanchans', models.PositiveIntegerField(default=0)),
|
||||||
('won_hanchans', models.PositiveIntegerField(default=0)),
|
('won_hanchans', models.PositiveIntegerField(default=0)),
|
||||||
('event', models.ForeignKey(to='events.Event')),
|
('event', models.ForeignKey(to='events.Event',
|
||||||
('user', models.ForeignKey(to=settings.AUTH_USER_MODEL)),
|
on_delete=models.CASCADE)),
|
||||||
|
('user', models.ForeignKey(to=settings.AUTH_USER_MODEL,
|
||||||
|
on_delete=models.CASCADE)),
|
||||||
],
|
],
|
||||||
options={
|
options={
|
||||||
'ordering': ('placement', 'avg_placement', '-avg_score'),
|
'ordering': ('placement', 'avg_placement', '-avg_score'),
|
||||||
@@ -35,10 +38,13 @@ class Migration(migrations.Migration):
|
|||||||
name='Hanchan',
|
name='Hanchan',
|
||||||
fields=[
|
fields=[
|
||||||
('id', models.AutoField(verbose_name='ID',
|
('id', models.AutoField(verbose_name='ID',
|
||||||
serialize=False, auto_created=True, primary_key=True)),
|
serialize=False, auto_created=True,
|
||||||
|
primary_key=True)),
|
||||||
('start', models.DateTimeField(
|
('start', models.DateTimeField(
|
||||||
help_text='Wichtig damit die richtigen Hanchans in die Wertung kommen.', verbose_name='Beginn')),
|
help_text='Wichtig damit die richtigen Hanchans in die Wertung kommen.',
|
||||||
('player1_input_score', models.IntegerField(verbose_name='Punkte')),
|
verbose_name='Beginn')),
|
||||||
|
('player1_input_score',
|
||||||
|
models.IntegerField(verbose_name='Punkte')),
|
||||||
('player1_game_score', models.PositiveIntegerField(
|
('player1_game_score', models.PositiveIntegerField(
|
||||||
default=0, verbose_name='Punkte', editable=False)),
|
default=0, verbose_name='Punkte', editable=False)),
|
||||||
('player1_placement', models.PositiveSmallIntegerField(
|
('player1_placement', models.PositiveSmallIntegerField(
|
||||||
@@ -50,8 +56,11 @@ class Migration(migrations.Migration):
|
|||||||
('player1_bonus_points', models.SmallIntegerField(
|
('player1_bonus_points', models.SmallIntegerField(
|
||||||
null=True, editable=False, blank=True)),
|
null=True, editable=False, blank=True)),
|
||||||
('player1_comment', models.CharField(verbose_name='Anmerkung',
|
('player1_comment', models.CharField(verbose_name='Anmerkung',
|
||||||
max_length=255, editable=False, blank=True)),
|
max_length=255,
|
||||||
('player2_input_score', models.IntegerField(verbose_name='Punkte')),
|
editable=False,
|
||||||
|
blank=True)),
|
||||||
|
('player2_input_score',
|
||||||
|
models.IntegerField(verbose_name='Punkte')),
|
||||||
('player2_game_score', models.PositiveIntegerField(
|
('player2_game_score', models.PositiveIntegerField(
|
||||||
default=0, verbose_name='Punkte', editable=False)),
|
default=0, verbose_name='Punkte', editable=False)),
|
||||||
('player2_placement', models.PositiveSmallIntegerField(
|
('player2_placement', models.PositiveSmallIntegerField(
|
||||||
@@ -63,8 +72,11 @@ class Migration(migrations.Migration):
|
|||||||
('player2_bonus_points', models.SmallIntegerField(
|
('player2_bonus_points', models.SmallIntegerField(
|
||||||
null=True, editable=False, blank=True)),
|
null=True, editable=False, blank=True)),
|
||||||
('player2_comment', models.CharField(verbose_name='Anmerkung',
|
('player2_comment', models.CharField(verbose_name='Anmerkung',
|
||||||
max_length=255, editable=False, blank=True)),
|
max_length=255,
|
||||||
('player3_input_score', models.IntegerField(verbose_name='Punkte')),
|
editable=False,
|
||||||
|
blank=True)),
|
||||||
|
('player3_input_score',
|
||||||
|
models.IntegerField(verbose_name='Punkte')),
|
||||||
('player3_game_score', models.PositiveIntegerField(
|
('player3_game_score', models.PositiveIntegerField(
|
||||||
default=0, verbose_name='Punkte', editable=False)),
|
default=0, verbose_name='Punkte', editable=False)),
|
||||||
('player3_placement', models.PositiveSmallIntegerField(
|
('player3_placement', models.PositiveSmallIntegerField(
|
||||||
@@ -76,8 +88,11 @@ class Migration(migrations.Migration):
|
|||||||
('player3_bonus_points', models.SmallIntegerField(
|
('player3_bonus_points', models.SmallIntegerField(
|
||||||
null=True, editable=False, blank=True)),
|
null=True, editable=False, blank=True)),
|
||||||
('player3_comment', models.CharField(verbose_name='Anmerkung',
|
('player3_comment', models.CharField(verbose_name='Anmerkung',
|
||||||
max_length=255, editable=False, blank=True)),
|
max_length=255,
|
||||||
('player4_input_score', models.IntegerField(verbose_name='Punkte')),
|
editable=False,
|
||||||
|
blank=True)),
|
||||||
|
('player4_input_score',
|
||||||
|
models.IntegerField(verbose_name='Punkte')),
|
||||||
('player4_game_score', models.PositiveIntegerField(
|
('player4_game_score', models.PositiveIntegerField(
|
||||||
default=0, verbose_name='Punkte', editable=False)),
|
default=0, verbose_name='Punkte', editable=False)),
|
||||||
('player4_placement', models.PositiveSmallIntegerField(
|
('player4_placement', models.PositiveSmallIntegerField(
|
||||||
@@ -89,22 +104,37 @@ class Migration(migrations.Migration):
|
|||||||
('player4_bonus_points', models.SmallIntegerField(
|
('player4_bonus_points', models.SmallIntegerField(
|
||||||
null=True, editable=False, blank=True)),
|
null=True, editable=False, blank=True)),
|
||||||
('player4_comment', models.CharField(verbose_name='Anmerkung',
|
('player4_comment', models.CharField(verbose_name='Anmerkung',
|
||||||
max_length=255, editable=False, blank=True)),
|
max_length=255,
|
||||||
('comment', models.TextField(verbose_name='Anmerkung', blank=True)),
|
editable=False,
|
||||||
|
blank=True)),
|
||||||
|
('comment',
|
||||||
|
models.TextField(verbose_name='Anmerkung', blank=True)),
|
||||||
('confirmed', models.BooleanField(
|
('confirmed', models.BooleanField(
|
||||||
default=True, help_text='Nur g\xfcltige und best\xe4tigte Hanchans kommen in die Wertung.', verbose_name='Wurde best\xe4tigt')),
|
default=True,
|
||||||
('player_names', models.CharField(max_length=255, editable=False)),
|
help_text='Nur g\xfcltige und best\xe4tigte Hanchans kommen in die Wertung.',
|
||||||
|
verbose_name='Wurde best\xe4tigt')),
|
||||||
|
('player_names',
|
||||||
|
models.CharField(max_length=255, editable=False)),
|
||||||
('season', models.PositiveSmallIntegerField(
|
('season', models.PositiveSmallIntegerField(
|
||||||
verbose_name='Saison', editable=False, db_index=True)),
|
verbose_name='Saison', editable=False, db_index=True)),
|
||||||
('event', models.ForeignKey(to='events.Event')),
|
('event', models.ForeignKey(to='events.Event',
|
||||||
|
on_delete=models.CASCADE)),
|
||||||
('player1', models.ForeignKey(related_name='user_hanchan+',
|
('player1', models.ForeignKey(related_name='user_hanchan+',
|
||||||
verbose_name='Spieler 1', to=settings.AUTH_USER_MODEL)),
|
verbose_name='Spieler 1',
|
||||||
|
to=settings.AUTH_USER_MODEL,
|
||||||
|
on_delete=models.CASCADE)),
|
||||||
('player2', models.ForeignKey(related_name='user_hanchan+',
|
('player2', models.ForeignKey(related_name='user_hanchan+',
|
||||||
verbose_name='Spieler 2', to=settings.AUTH_USER_MODEL)),
|
verbose_name='Spieler 2',
|
||||||
|
to=settings.AUTH_USER_MODEL,
|
||||||
|
on_delete=models.CASCADE)),
|
||||||
('player3', models.ForeignKey(related_name='user_hanchan+',
|
('player3', models.ForeignKey(related_name='user_hanchan+',
|
||||||
verbose_name='Spieler 3', to=settings.AUTH_USER_MODEL)),
|
verbose_name='Spieler 3',
|
||||||
|
to=settings.AUTH_USER_MODEL,
|
||||||
|
on_delete=models.CASCADE)),
|
||||||
('player4', models.ForeignKey(related_name='user_hanchan+',
|
('player4', models.ForeignKey(related_name='user_hanchan+',
|
||||||
verbose_name='Spieler 4', to=settings.AUTH_USER_MODEL)),
|
verbose_name='Spieler 4',
|
||||||
|
to=settings.AUTH_USER_MODEL,
|
||||||
|
on_delete=models.CASCADE)),
|
||||||
],
|
],
|
||||||
options={
|
options={
|
||||||
'ordering': ('-start',),
|
'ordering': ('-start',),
|
||||||
@@ -116,8 +146,11 @@ class Migration(migrations.Migration):
|
|||||||
name='KyuDanRanking',
|
name='KyuDanRanking',
|
||||||
fields=[
|
fields=[
|
||||||
('id', models.AutoField(verbose_name='ID',
|
('id', models.AutoField(verbose_name='ID',
|
||||||
serialize=False, auto_created=True, primary_key=True)),
|
serialize=False, auto_created=True,
|
||||||
('dan', models.PositiveSmallIntegerField(null=True, blank=True)),
|
primary_key=True)),
|
||||||
|
(
|
||||||
|
'dan',
|
||||||
|
models.PositiveSmallIntegerField(null=True, blank=True)),
|
||||||
('dan_points', models.PositiveIntegerField(default=0)),
|
('dan_points', models.PositiveIntegerField(default=0)),
|
||||||
('kyu', models.PositiveSmallIntegerField(
|
('kyu', models.PositiveSmallIntegerField(
|
||||||
default=10, null=True, blank=True)),
|
default=10, null=True, blank=True)),
|
||||||
@@ -128,7 +161,8 @@ class Migration(migrations.Migration):
|
|||||||
('legacy_date', models.DateField(null=True, blank=True)),
|
('legacy_date', models.DateField(null=True, blank=True)),
|
||||||
('legacy_dan_points', models.PositiveIntegerField(default=0)),
|
('legacy_dan_points', models.PositiveIntegerField(default=0)),
|
||||||
('legacy_kyu_points', models.PositiveIntegerField(default=0)),
|
('legacy_kyu_points', models.PositiveIntegerField(default=0)),
|
||||||
('user', models.OneToOneField(to=settings.AUTH_USER_MODEL)),
|
('user', models.OneToOneField(to=settings.AUTH_USER_MODEL,
|
||||||
|
on_delete=models.CASCADE)),
|
||||||
],
|
],
|
||||||
options={
|
options={
|
||||||
'ordering': ('-dan', '-dan_points', '-kyu_points'),
|
'ordering': ('-dan', '-dan_points', '-kyu_points'),
|
||||||
@@ -140,15 +174,19 @@ class Migration(migrations.Migration):
|
|||||||
name='SeasonRanking',
|
name='SeasonRanking',
|
||||||
fields=[
|
fields=[
|
||||||
('id', models.AutoField(verbose_name='ID',
|
('id', models.AutoField(verbose_name='ID',
|
||||||
serialize=False, auto_created=True, primary_key=True)),
|
serialize=False, auto_created=True,
|
||||||
('season', models.PositiveSmallIntegerField(verbose_name='Saison')),
|
primary_key=True)),
|
||||||
('placement', models.PositiveIntegerField(null=True, blank=True)),
|
('season',
|
||||||
|
models.PositiveSmallIntegerField(verbose_name='Saison')),
|
||||||
|
('placement',
|
||||||
|
models.PositiveIntegerField(null=True, blank=True)),
|
||||||
('avg_placement', models.FloatField(null=True, blank=True)),
|
('avg_placement', models.FloatField(null=True, blank=True)),
|
||||||
('avg_score', models.FloatField(null=True, blank=True)),
|
('avg_score', models.FloatField(null=True, blank=True)),
|
||||||
('hanchan_count', models.PositiveIntegerField(default=0)),
|
('hanchan_count', models.PositiveIntegerField(default=0)),
|
||||||
('good_hanchans', models.PositiveIntegerField(default=0)),
|
('good_hanchans', models.PositiveIntegerField(default=0)),
|
||||||
('won_hanchans', models.PositiveIntegerField(default=0)),
|
('won_hanchans', models.PositiveIntegerField(default=0)),
|
||||||
('user', models.ForeignKey(to=settings.AUTH_USER_MODEL)),
|
('user', models.ForeignKey(to=settings.AUTH_USER_MODEL,
|
||||||
|
on_delete=models.CASCADE)),
|
||||||
],
|
],
|
||||||
options={
|
options={
|
||||||
'ordering': ('placement', 'avg_placement', '-avg_score'),
|
'ordering': ('placement', 'avg_placement', '-avg_score'),
|
||||||
|
|||||||
@@ -9,8 +9,8 @@ from datetime import datetime, time
|
|||||||
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.core.exceptions import ValidationError
|
from django.core.exceptions import ValidationError
|
||||||
from django.core.urlresolvers import reverse
|
|
||||||
from django.db import models
|
from django.db import models
|
||||||
|
from django.urls import reverse
|
||||||
from django.utils import timezone
|
from django.utils import timezone
|
||||||
from django.utils.translation import ugettext as _
|
from django.utils.translation import ugettext as _
|
||||||
|
|
||||||
@@ -29,8 +29,8 @@ class EventRanking(models.Model):
|
|||||||
Sie beschränken sich aber auf einen Event und werden nur dann angestossen,
|
Sie beschränken sich aber auf einen Event und werden nur dann angestossen,
|
||||||
wenn der Event als Turnier markiert wurde.
|
wenn der Event als Turnier markiert wurde.
|
||||||
"""
|
"""
|
||||||
user = models.ForeignKey(settings.AUTH_USER_MODEL)
|
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.PROTECT)
|
||||||
event = models.ForeignKey(Event)
|
event = models.ForeignKey(Event, on_delete=models.CASCADE)
|
||||||
placement = models.PositiveIntegerField(blank=True, null=True)
|
placement = models.PositiveIntegerField(blank=True, null=True)
|
||||||
avg_placement = models.FloatField(default=4)
|
avg_placement = models.FloatField(default=4)
|
||||||
avg_score = models.FloatField(default=0)
|
avg_score = models.FloatField(default=0)
|
||||||
@@ -86,7 +86,7 @@ class Hanchan(models.Model):
|
|||||||
Es werden aber noch andere Tests durchgeführt, ob sie gültig ist.
|
Es werden aber noch andere Tests durchgeführt, ob sie gültig ist.
|
||||||
Außerdem gehört jede Hanchan zu einer Veranstaltung.
|
Außerdem gehört jede Hanchan zu einer Veranstaltung.
|
||||||
"""
|
"""
|
||||||
event = models.ForeignKey(Event)
|
event = models.ForeignKey(Event, on_delete=models.CASCADE)
|
||||||
start = models.DateTimeField(
|
start = models.DateTimeField(
|
||||||
_('Start'),
|
_('Start'),
|
||||||
help_text=_('This is crucial to get the right Hanchans that scores')
|
help_text=_('This is crucial to get the right Hanchans that scores')
|
||||||
@@ -94,7 +94,7 @@ class Hanchan(models.Model):
|
|||||||
|
|
||||||
player1 = models.ForeignKey(
|
player1 = models.ForeignKey(
|
||||||
settings.AUTH_USER_MODEL,
|
settings.AUTH_USER_MODEL,
|
||||||
on_delete=models.CASCADE,
|
on_delete=models.PROTECT,
|
||||||
related_name='user_hanchan+',
|
related_name='user_hanchan+',
|
||||||
verbose_name=_('Player 1'))
|
verbose_name=_('Player 1'))
|
||||||
player1_input_score = models.IntegerField(_('Score'))
|
player1_input_score = models.IntegerField(_('Score'))
|
||||||
@@ -113,7 +113,7 @@ class Hanchan(models.Model):
|
|||||||
|
|
||||||
player2 = models.ForeignKey(
|
player2 = models.ForeignKey(
|
||||||
settings.AUTH_USER_MODEL,
|
settings.AUTH_USER_MODEL,
|
||||||
on_delete=models.CASCADE,
|
on_delete=models.PROTECT,
|
||||||
related_name='user_hanchan+',
|
related_name='user_hanchan+',
|
||||||
verbose_name=_('Player 2'))
|
verbose_name=_('Player 2'))
|
||||||
player2_input_score = models.IntegerField(_('Score'))
|
player2_input_score = models.IntegerField(_('Score'))
|
||||||
@@ -132,7 +132,7 @@ class Hanchan(models.Model):
|
|||||||
|
|
||||||
player3 = models.ForeignKey(
|
player3 = models.ForeignKey(
|
||||||
settings.AUTH_USER_MODEL,
|
settings.AUTH_USER_MODEL,
|
||||||
on_delete=models.CASCADE,
|
on_delete=models.PROTECT,
|
||||||
related_name='user_hanchan+',
|
related_name='user_hanchan+',
|
||||||
verbose_name=_('Player 3'))
|
verbose_name=_('Player 3'))
|
||||||
player3_input_score = models.IntegerField(_('Score'))
|
player3_input_score = models.IntegerField(_('Score'))
|
||||||
@@ -151,7 +151,7 @@ class Hanchan(models.Model):
|
|||||||
|
|
||||||
player4 = models.ForeignKey(
|
player4 = models.ForeignKey(
|
||||||
settings.AUTH_USER_MODEL,
|
settings.AUTH_USER_MODEL,
|
||||||
on_delete=models.CASCADE,
|
on_delete=models.PROTECT,
|
||||||
related_name='user_hanchan+',
|
related_name='user_hanchan+',
|
||||||
verbose_name=_('Player 4'))
|
verbose_name=_('Player 4'))
|
||||||
player4_input_score = models.IntegerField(_('Score'))
|
player4_input_score = models.IntegerField(_('Score'))
|
||||||
@@ -335,18 +335,21 @@ class KyuDanRanking(models.Model):
|
|||||||
Im Gegensatz zum Ladder Ranking ist das nicht Saison gebunden.
|
Im Gegensatz zum Ladder Ranking ist das nicht Saison gebunden.
|
||||||
Deswegen läuft es getrennt.
|
Deswegen läuft es getrennt.
|
||||||
"""
|
"""
|
||||||
user = models.OneToOneField(settings.AUTH_USER_MODEL)
|
user = models.OneToOneField(settings.AUTH_USER_MODEL,
|
||||||
|
on_delete=models.CASCADE)
|
||||||
dan = models.PositiveSmallIntegerField(blank=True, null=True)
|
dan = models.PositiveSmallIntegerField(blank=True, null=True)
|
||||||
dan_points = models.PositiveIntegerField(default=0)
|
dan_points = models.PositiveIntegerField(default=0)
|
||||||
|
max_dan_points = models.PositiveIntegerField(default=0)
|
||||||
kyu = models.PositiveSmallIntegerField(default=10, blank=True, null=True)
|
kyu = models.PositiveSmallIntegerField(default=10, blank=True, null=True)
|
||||||
kyu_points = models.PositiveIntegerField(default=0)
|
kyu_points = models.PositiveIntegerField(default=0)
|
||||||
won_hanchans = models.PositiveIntegerField(default=0)
|
won_hanchans = models.PositiveIntegerField(default=0)
|
||||||
good_hanchans = models.PositiveIntegerField(default=0)
|
good_hanchans = models.PositiveIntegerField(default=0)
|
||||||
hanchan_count = models.PositiveIntegerField(default=0)
|
hanchan_count = models.PositiveIntegerField(default=0)
|
||||||
legacy_date = models.DateField(blank=True, null=True)
|
legacy_date = models.DateField(blank=True, null=True)
|
||||||
legacy_hanchan_count = models.PositiveIntegerField(default=0)
|
legacy_dan = models.PositiveSmallIntegerField(blank=True, null=True)
|
||||||
legacy_dan_points = models.PositiveIntegerField(default=0)
|
legacy_dan_points = models.PositiveIntegerField(default=0)
|
||||||
legacy_kyu_points = models.PositiveIntegerField(default=0)
|
legacy_kyu_points = models.PositiveIntegerField(default=0)
|
||||||
|
legacy_hanchan_count = models.PositiveIntegerField(default=0)
|
||||||
wins_in_a_row = models.PositiveIntegerField(default=0)
|
wins_in_a_row = models.PositiveIntegerField(default=0)
|
||||||
last_hanchan_date = models.DateTimeField(blank=True, null=True)
|
last_hanchan_date = models.DateTimeField(blank=True, null=True)
|
||||||
objects = managers.KyuDanRankingManager()
|
objects = managers.KyuDanRankingManager()
|
||||||
@@ -356,8 +359,8 @@ class KyuDanRanking(models.Model):
|
|||||||
verbose_name = _(u'Kyū/Dan Ranking')
|
verbose_name = _(u'Kyū/Dan Ranking')
|
||||||
verbose_name_plural = _(u'Kyū/Dan Rankings')
|
verbose_name_plural = _(u'Kyū/Dan Rankings')
|
||||||
|
|
||||||
def __unicode__(self):
|
def __str__(self):
|
||||||
if self.dan_points is not None:
|
if self.dan is not None:
|
||||||
return u"%s - %d. Dan" % (self.user.username, self.dan or 1)
|
return u"%s - %d. Dan" % (self.user.username, self.dan or 1)
|
||||||
else:
|
else:
|
||||||
return u"%s - %d. Kyu" % (self.user.username, self.kyu or 10)
|
return u"%s - %d. Kyu" % (self.user.username, self.kyu or 10)
|
||||||
@@ -395,7 +398,6 @@ class KyuDanRanking(models.Model):
|
|||||||
self.dan_points += bonus_points
|
self.dan_points += bonus_points
|
||||||
self.wins_in_a_row = 0
|
self.wins_in_a_row = 0
|
||||||
|
|
||||||
# TODO: Komplett Überabreiten!
|
|
||||||
def append_tournament_bonuspoints(self, hanchan):
|
def append_tournament_bonuspoints(self, hanchan):
|
||||||
"""
|
"""
|
||||||
Prüft ob es die letzte Hanchan in einem Turnier war. Wenn ja werden
|
Prüft ob es die letzte Hanchan in einem Turnier war. Wenn ja werden
|
||||||
@@ -408,20 +410,20 @@ class KyuDanRanking(models.Model):
|
|||||||
user=self.user, event=hanchan.event
|
user=self.user, event=hanchan.event
|
||||||
).order_by('-start')
|
).order_by('-start')
|
||||||
last_hanchan_this_event = hanchans_this_event[0]
|
last_hanchan_this_event = hanchans_this_event[0]
|
||||||
if hanchan != last_hanchan_this_event:
|
|
||||||
# Das braucht nur am Ende eines Turnieres gemacht werden.
|
# Das braucht nur am Ende eines Turnieres gemacht werden.
|
||||||
return False
|
if hanchan != last_hanchan_this_event: return False
|
||||||
else:
|
|
||||||
event_ranking = EventRanking.objects.get(
|
event_ranking = EventRanking.objects.get(
|
||||||
user=self.user,
|
user=self.user,
|
||||||
event=hanchan.event
|
event=hanchan.event
|
||||||
)
|
)
|
||||||
if event_ranking.placement == 1:
|
if event_ranking.placement == 1:
|
||||||
bonus_points += 4
|
bonus_points += settings.TOURNAMENT_WIN_BONUSPOINTS
|
||||||
hanchan.player_comment += u'+4 Punkte Turnier gewonnen. '
|
hanchan.player_comment += u'+{0:d} Punkte Turnier gewonnen. '.format(
|
||||||
|
settings.TOURNAMENT_WIN_BONUSPOINTS)
|
||||||
if event_ranking.avg_placement == 1:
|
if event_ranking.avg_placement == 1:
|
||||||
bonus_points += 8
|
bonus_points += settings.TOURNAMENT_FLAWLESS_VICTORY_BONUSPOINTS
|
||||||
hanchan.player_comment += u'+8 Pkt: alle Spiele des Turnieres gewonnen. '
|
hanchan.player_comment += u'+{0:d} Pkt: alle Spiele des Turnieres gewonnen. '.format(
|
||||||
|
settings.TOURNAMENT_FLAWLESS_VICTORY_BONUSPOINTS)
|
||||||
|
|
||||||
if bonus_points and self.dan:
|
if bonus_points and self.dan:
|
||||||
hanchan.dan_points += bonus_points
|
hanchan.dan_points += bonus_points
|
||||||
@@ -451,7 +453,7 @@ class KyuDanRanking(models.Model):
|
|||||||
force_recalc = True
|
force_recalc = True
|
||||||
if force_recalc:
|
if force_recalc:
|
||||||
# Setze alles auf die legacy Werte und berechne alles von neuem.
|
# Setze alles auf die legacy Werte und berechne alles von neuem.
|
||||||
self.dan = None
|
self.dan = self.legacy_dan
|
||||||
self.dan_points = self.legacy_dan_points or 0
|
self.dan_points = self.legacy_dan_points or 0
|
||||||
self.kyu = None
|
self.kyu = None
|
||||||
self.kyu_points = self.legacy_kyu_points or 0
|
self.kyu_points = self.legacy_kyu_points or 0
|
||||||
@@ -507,14 +509,14 @@ class KyuDanRanking(models.Model):
|
|||||||
'score: %(score)d, kyu points: %(kyu_points)d, dan points: '
|
'score: %(score)d, kyu points: %(kyu_points)d, dan points: '
|
||||||
'%(dan_points)d, bonus points: %(bonus_points)d',
|
'%(dan_points)d, bonus points: %(bonus_points)d',
|
||||||
{'id': hanchan.pk, 'start': hanchan.start,
|
{'id': hanchan.pk, 'start': hanchan.start,
|
||||||
'placement': hanchan.placement, 'score': hanchan.game_score,
|
'placement': hanchan.placement,
|
||||||
|
'score': hanchan.game_score,
|
||||||
'kyu_points': hanchan.kyu_points or 0,
|
'kyu_points': hanchan.kyu_points or 0,
|
||||||
'dan_points': hanchan.dan_points or 0,
|
'dan_points': hanchan.dan_points or 0,
|
||||||
'bonus_points': hanchan.bonus_points or 0}
|
'bonus_points': hanchan.bonus_points or 0}
|
||||||
)
|
)
|
||||||
self.save(force_update=True)
|
self.save(force_update=True)
|
||||||
|
|
||||||
|
|
||||||
def update_hanchan_points(self, hanchan):
|
def update_hanchan_points(self, hanchan):
|
||||||
"""
|
"""
|
||||||
Berechne die Kyu bzw. Dan Punkte für eine Hanchan neu.
|
Berechne die Kyu bzw. Dan Punkte für eine Hanchan neu.
|
||||||
@@ -523,7 +525,7 @@ class KyuDanRanking(models.Model):
|
|||||||
"""
|
"""
|
||||||
hanchan.kyu_points = None
|
hanchan.kyu_points = None
|
||||||
hanchan.dan_points = None
|
hanchan.dan_points = None
|
||||||
if hanchan.event.mahjong_tournament:
|
if hanchan.event.mahjong_tournament and settings.TOURNAMENT_POINT_SYSTEM:
|
||||||
"""Für Turniere gelten andere Regeln zur Punktevergabe:
|
"""Für Turniere gelten andere Regeln zur Punktevergabe:
|
||||||
1. Platz 4 Punkte
|
1. Platz 4 Punkte
|
||||||
2. Platz 3 Punkte
|
2. Platz 3 Punkte
|
||||||
@@ -547,6 +549,7 @@ class KyuDanRanking(models.Model):
|
|||||||
hanchan.dan_points = -1
|
hanchan.dan_points = -1
|
||||||
elif hanchan.placement == 4:
|
elif hanchan.placement == 4:
|
||||||
hanchan.dan_points = -2
|
hanchan.dan_points = -2
|
||||||
|
# otherwise player must be in the kyu ranking
|
||||||
elif hanchan.game_score >= 60000:
|
elif hanchan.game_score >= 60000:
|
||||||
hanchan.kyu_points = 3
|
hanchan.kyu_points = 3
|
||||||
elif hanchan.game_score >= 30000:
|
elif hanchan.game_score >= 30000:
|
||||||
@@ -568,38 +571,30 @@ class KyuDanRanking(models.Model):
|
|||||||
hanchan.kyu_points -= (self.kyu_points + hanchan.kyu_points)
|
hanchan.kyu_points -= (self.kyu_points + hanchan.kyu_points)
|
||||||
self.kyu_points += hanchan.kyu_points
|
self.kyu_points += hanchan.kyu_points
|
||||||
|
|
||||||
|
|
||||||
# TODO: Merkwürdige Methode die zwar funktioniert aber nicht sehr
|
|
||||||
# aussagekräfig ist. Überarbeiten?
|
|
||||||
def update_rank(self):
|
def update_rank(self):
|
||||||
if self.dan and self.dan_points < 0:
|
print(self.user, self.dan, self.kyu)
|
||||||
self.dan_points = 0
|
|
||||||
self.dan = 1
|
|
||||||
elif self.dan or self.dan_points > 0:
|
|
||||||
old_dan = self.dan
|
old_dan = self.dan
|
||||||
for min_points, dan_rank in settings.DAN_RANKS:
|
if settings.DAN_ALLOW_DROP_DOWN and (self.dan or self.dan_points > 0):
|
||||||
if self.dan_points > min_points:
|
self.dan = max((dan for min_points, dan in settings.DAN_RANKS if
|
||||||
self.dan = dan_rank
|
self.dan_points > min_points))
|
||||||
break
|
elif self.dan or self.dan_points > 0:
|
||||||
if old_dan is None or self.dan > old_dan:
|
self.dan = max((dan for min_points, dan in settings.DAN_RANKS if
|
||||||
self.wins_in_a_row = 0
|
self.max_dan_points > min_points))
|
||||||
elif self.kyu_points < 1:
|
|
||||||
self.kyu_points = 0
|
|
||||||
self.kyu = 10
|
|
||||||
elif self.kyu_points > 50:
|
elif self.kyu_points > 50:
|
||||||
self.dan = 1
|
self.dan = 1
|
||||||
self.kyu = None
|
|
||||||
self.dan_points = 0
|
self.dan_points = 0
|
||||||
|
self.kyu = None
|
||||||
self.kyu_points = 0
|
self.kyu_points = 0
|
||||||
|
self.wins_in_a_row = 0
|
||||||
else:
|
else:
|
||||||
for min_points, kyu_rank in settings.KYU_RANKS:
|
print(self, self.kyu_points)
|
||||||
if self.kyu_points > min_points:
|
self.kyu = max((kyu for min_points, kyu in settings.KYU_RANKS if
|
||||||
self.kyu = kyu_rank
|
self.kyu_points > min_points))
|
||||||
break
|
self.wins_in_a_row = 0 if self.dan > old_dan else self.wins_in_a_row
|
||||||
|
|
||||||
|
|
||||||
class SeasonRanking(models.Model):
|
class SeasonRanking(models.Model):
|
||||||
user = models.ForeignKey(settings.AUTH_USER_MODEL)
|
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.PROTECT)
|
||||||
season = models.PositiveSmallIntegerField(_('Season'))
|
season = models.PositiveSmallIntegerField(_('Season'))
|
||||||
placement = models.PositiveIntegerField(blank=True, null=True)
|
placement = models.PositiveIntegerField(blank=True, null=True)
|
||||||
avg_placement = models.FloatField(blank=True, null=True)
|
avg_placement = models.FloatField(blank=True, null=True)
|
||||||
|
|||||||
@@ -37,19 +37,19 @@ class Migration(migrations.Migration):
|
|||||||
('season', models.PositiveSmallIntegerField(
|
('season', models.PositiveSmallIntegerField(
|
||||||
verbose_name='Saison', editable=False, db_index=True)),
|
verbose_name='Saison', editable=False, db_index=True)),
|
||||||
('event', models.ForeignKey(
|
('event', models.ForeignKey(
|
||||||
related_name='maistargame_set', to='events.Event')),
|
related_name='maistargame_set', to='events.Event', on_delete=models.CASCADE)),
|
||||||
('player1', models.ForeignKey(related_name='+',
|
('player1', models.ForeignKey(related_name='+',
|
||||||
verbose_name='Spieler 1', to=settings.AUTH_USER_MODEL)),
|
verbose_name='Spieler 1', to=settings.AUTH_USER_MODEL, on_delete=models.CASCADE)),
|
||||||
('player2', models.ForeignKey(related_name='+',
|
('player2', models.ForeignKey(related_name='+',
|
||||||
verbose_name='Spieler 2', to=settings.AUTH_USER_MODEL)),
|
verbose_name='Spieler 2', to=settings.AUTH_USER_MODEL, on_delete=models.CASCADE)),
|
||||||
('player3', models.ForeignKey(related_name='+',
|
('player3', models.ForeignKey(related_name='+',
|
||||||
verbose_name='Spieler 3', to=settings.AUTH_USER_MODEL)),
|
verbose_name='Spieler 3', to=settings.AUTH_USER_MODEL, on_delete=models.CASCADE)),
|
||||||
('player4', models.ForeignKey(related_name='+',
|
('player4', models.ForeignKey(related_name='+',
|
||||||
verbose_name='Spieler 4', to=settings.AUTH_USER_MODEL)),
|
verbose_name='Spieler 4', to=settings.AUTH_USER_MODEL, on_delete=models.CASCADE)),
|
||||||
('player5', models.ForeignKey(related_name='+',
|
('player5', models.ForeignKey(related_name='+',
|
||||||
verbose_name='Spieler 5', to=settings.AUTH_USER_MODEL)),
|
verbose_name='Spieler 5', to=settings.AUTH_USER_MODEL, on_delete=models.CASCADE)),
|
||||||
('player6', models.ForeignKey(related_name='+',
|
('player6', models.ForeignKey(related_name='+',
|
||||||
verbose_name='Spieler 6', to=settings.AUTH_USER_MODEL)),
|
verbose_name='Spieler 6', to=settings.AUTH_USER_MODEL, on_delete=models.CASCADE)),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
migrations.CreateModel(
|
migrations.CreateModel(
|
||||||
@@ -65,7 +65,7 @@ class Migration(migrations.Migration):
|
|||||||
('games_count', models.PositiveSmallIntegerField(default=0)),
|
('games_count', models.PositiveSmallIntegerField(default=0)),
|
||||||
('games_good', models.PositiveSmallIntegerField(default=0)),
|
('games_good', models.PositiveSmallIntegerField(default=0)),
|
||||||
('games_won', models.PositiveSmallIntegerField(default=0)),
|
('games_won', models.PositiveSmallIntegerField(default=0)),
|
||||||
('user', models.ForeignKey(to=settings.AUTH_USER_MODEL)),
|
('user', models.ForeignKey(to=settings.AUTH_USER_MODEL, on_delete=models.CASCADE)),
|
||||||
],
|
],
|
||||||
options={
|
options={
|
||||||
'ordering': ('-season', 'placement', 'avg_placement', '-avg_score'),
|
'ordering': ('-season', 'placement', 'avg_placement', '-avg_score'),
|
||||||
|
|||||||
@@ -2,11 +2,11 @@
|
|||||||
|
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
from django.urls import reverse
|
|
||||||
from django.db import models
|
from django.db import models
|
||||||
from django.db.models.signals import post_delete, post_save
|
from django.db.models.signals import post_delete, post_save
|
||||||
from django.utils.translation import ugettext as _
|
|
||||||
from django.dispatch import receiver
|
from django.dispatch import receiver
|
||||||
|
from django.urls import reverse
|
||||||
|
from django.utils.translation import ugettext as _
|
||||||
|
|
||||||
from events.models import Event
|
from events.models import Event
|
||||||
from . import settings, managers
|
from . import settings, managers
|
||||||
@@ -16,40 +16,47 @@ class Game(models.Model):
|
|||||||
"""to record a complete game with 6 different players."""
|
"""to record a complete game with 6 different players."""
|
||||||
|
|
||||||
_player_list = list()
|
_player_list = list()
|
||||||
event = models.ForeignKey(Event, related_name='maistargame_set')
|
event = models.ForeignKey(Event, on_delete=models.CASCADE,
|
||||||
|
related_name='maistargame_set')
|
||||||
comment = models.TextField(_('Comment'), blank=True)
|
comment = models.TextField(_('Comment'), blank=True)
|
||||||
player1 = models.ForeignKey(
|
player1 = models.ForeignKey(
|
||||||
settings.AUTH_USER_MODEL, verbose_name=_("Player 1"), related_name='+'
|
settings.AUTH_USER_MODEL, on_delete=models.PROTECT,
|
||||||
|
verbose_name=_("Player 1"), related_name='+'
|
||||||
)
|
)
|
||||||
player1_score = models.SmallIntegerField(_("Score"))
|
player1_score = models.SmallIntegerField(_("Score"))
|
||||||
player1_placement = models.PositiveSmallIntegerField(editable=False)
|
player1_placement = models.PositiveSmallIntegerField(editable=False)
|
||||||
|
|
||||||
player2 = models.ForeignKey(
|
player2 = models.ForeignKey(
|
||||||
settings.AUTH_USER_MODEL, verbose_name=_("Player 2"), related_name='+'
|
settings.AUTH_USER_MODEL, on_delete=models.PROTECT,
|
||||||
|
verbose_name=_("Player 2"), related_name='+'
|
||||||
)
|
)
|
||||||
player2_score = models.SmallIntegerField(_("Score"))
|
player2_score = models.SmallIntegerField(_("Score"))
|
||||||
player2_placement = models.PositiveSmallIntegerField(editable=False)
|
player2_placement = models.PositiveSmallIntegerField(editable=False)
|
||||||
|
|
||||||
player3 = models.ForeignKey(
|
player3 = models.ForeignKey(
|
||||||
settings.AUTH_USER_MODEL, verbose_name=_("Player 3"), related_name='+'
|
settings.AUTH_USER_MODEL, on_delete=models.PROTECT,
|
||||||
|
verbose_name=_("Player 3"), related_name='+'
|
||||||
)
|
)
|
||||||
player3_score = models.SmallIntegerField(_("Score"))
|
player3_score = models.SmallIntegerField(_("Score"))
|
||||||
player3_placement = models.PositiveSmallIntegerField(editable=False)
|
player3_placement = models.PositiveSmallIntegerField(editable=False)
|
||||||
|
|
||||||
player4 = models.ForeignKey(
|
player4 = models.ForeignKey(
|
||||||
settings.AUTH_USER_MODEL, verbose_name=_("Player 4"), related_name='+'
|
settings.AUTH_USER_MODEL, on_delete=models.PROTECT,
|
||||||
|
verbose_name=_("Player 4"), related_name='+'
|
||||||
)
|
)
|
||||||
player4_score = models.SmallIntegerField(_("Score"))
|
player4_score = models.SmallIntegerField(_("Score"))
|
||||||
player4_placement = models.PositiveSmallIntegerField(editable=False)
|
player4_placement = models.PositiveSmallIntegerField(editable=False)
|
||||||
|
|
||||||
player5 = models.ForeignKey(
|
player5 = models.ForeignKey(
|
||||||
settings.AUTH_USER_MODEL, verbose_name=_("Player 5"), related_name='+'
|
settings.AUTH_USER_MODEL, on_delete=models.PROTECT,
|
||||||
|
verbose_name=_("Player 5"), related_name='+'
|
||||||
)
|
)
|
||||||
player5_score = models.SmallIntegerField(_("Score"))
|
player5_score = models.SmallIntegerField(_("Score"))
|
||||||
player5_placement = models.PositiveSmallIntegerField(editable=False)
|
player5_placement = models.PositiveSmallIntegerField(editable=False)
|
||||||
|
|
||||||
player6 = models.ForeignKey(
|
player6 = models.ForeignKey(
|
||||||
settings.AUTH_USER_MODEL, verbose_name=_("Player 6"), related_name='+'
|
settings.AUTH_USER_MODEL, on_delete=models.PROTECT,
|
||||||
|
verbose_name=_("Player 6"), related_name='+'
|
||||||
)
|
)
|
||||||
player6_score = models.SmallIntegerField(_("Score"))
|
player6_score = models.SmallIntegerField(_("Score"))
|
||||||
player6_placement = models.PositiveSmallIntegerField(editable=False)
|
player6_placement = models.PositiveSmallIntegerField(editable=False)
|
||||||
@@ -69,7 +76,6 @@ class Game(models.Model):
|
|||||||
"""Display rankings by placement, best players first."""
|
"""Display rankings by placement, best players first."""
|
||||||
ordering = ('-event__start', '-id')
|
ordering = ('-event__start', '-id')
|
||||||
|
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return _("Mai-Star Game with {0} from {1:%Y-%m-%d}").format(
|
return _("Mai-Star Game with {0} from {1:%Y-%m-%d}").format(
|
||||||
self.player_names, self.event.start
|
self.player_names, self.event.start
|
||||||
@@ -143,7 +149,7 @@ class Game(models.Model):
|
|||||||
|
|
||||||
class Ranking(models.Model):
|
class Ranking(models.Model):
|
||||||
"""the player scores in the ladder for one season. """
|
"""the player scores in the ladder for one season. """
|
||||||
user = models.ForeignKey(settings.AUTH_USER_MODEL)
|
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.PROTECT)
|
||||||
season = models.PositiveSmallIntegerField(_("Season"))
|
season = models.PositiveSmallIntegerField(_("Season"))
|
||||||
placement = models.PositiveIntegerField(blank=True, null=True)
|
placement = models.PositiveIntegerField(blank=True, null=True)
|
||||||
avg_placement = models.PositiveSmallIntegerField(blank=True, null=True)
|
avg_placement = models.PositiveSmallIntegerField(blank=True, null=True)
|
||||||
|
|||||||
@@ -1,17 +1,17 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
from django.db import models, migrations
|
|
||||||
import django.core.validators
|
|
||||||
import django.contrib.auth.models
|
import django.contrib.auth.models
|
||||||
from django.conf import settings
|
import django.core.validators
|
||||||
import django.utils.timezone
|
import django.utils.timezone
|
||||||
|
from django.conf import settings
|
||||||
|
from django.db import models, migrations
|
||||||
|
|
||||||
import membership.models
|
import membership.models
|
||||||
import utils
|
import utils
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
('auth', '0006_require_contenttypes_0002'),
|
('auth', '0006_require_contenttypes_0002'),
|
||||||
]
|
]
|
||||||
@@ -21,56 +21,94 @@ class Migration(migrations.Migration):
|
|||||||
name='Membership',
|
name='Membership',
|
||||||
fields=[
|
fields=[
|
||||||
('id', models.AutoField(verbose_name='ID',
|
('id', models.AutoField(verbose_name='ID',
|
||||||
serialize=False, auto_created=True, primary_key=True)),
|
serialize=False, auto_created=True,
|
||||||
|
primary_key=True)),
|
||||||
('password', models.CharField(
|
('password', models.CharField(
|
||||||
max_length=128, verbose_name='password')),
|
max_length=128, verbose_name='password')),
|
||||||
('last_login', models.DateTimeField(
|
('last_login', models.DateTimeField(
|
||||||
null=True, verbose_name='last login', blank=True)),
|
null=True, verbose_name='last login', blank=True)),
|
||||||
('is_superuser', models.BooleanField(default=False,
|
('is_superuser', models.BooleanField(default=False,
|
||||||
help_text='Designates that this user has all permissions without explicitly assigning them.', verbose_name='superuser status')),
|
help_text='Designates that this user has all permissions without explicitly assigning them.',
|
||||||
('username', models.CharField(error_messages={'unique': 'A user with that username already exists.'}, max_length=30, validators=[django.core.validators.RegexValidator(
|
verbose_name='superuser status')),
|
||||||
'^[\\w.@+-]+$', 'Enter a valid username. This value may contain only letters, numbers and @/./+/-/_ characters.', 'invalid')], help_text='Required. 30 characters or fewer. Letters, digits and @/./+/-/_ only.', unique=True, verbose_name='username')),
|
('username', models.CharField(error_messages={
|
||||||
|
'unique': 'A user with that username already exists.'},
|
||||||
|
max_length=30, validators=[
|
||||||
|
django.core.validators.RegexValidator(
|
||||||
|
'^[\\w.@+-]+$',
|
||||||
|
'Enter a valid username. This value may contain only letters, numbers and @/./+/-/_ characters.',
|
||||||
|
'invalid')],
|
||||||
|
help_text='Required. 30 characters or fewer. Letters, digits and @/./+/-/_ only.',
|
||||||
|
unique=True,
|
||||||
|
verbose_name='username')),
|
||||||
('first_name', models.CharField(max_length=30,
|
('first_name', models.CharField(max_length=30,
|
||||||
verbose_name='first name', blank=True)),
|
verbose_name='first name',
|
||||||
|
blank=True)),
|
||||||
('last_name', models.CharField(max_length=30,
|
('last_name', models.CharField(max_length=30,
|
||||||
verbose_name='last name', blank=True)),
|
verbose_name='last name',
|
||||||
|
blank=True)),
|
||||||
('email', models.EmailField(max_length=254,
|
('email', models.EmailField(max_length=254,
|
||||||
verbose_name='email address', blank=True)),
|
verbose_name='email address',
|
||||||
|
blank=True)),
|
||||||
('is_staff', models.BooleanField(default=False,
|
('is_staff', models.BooleanField(default=False,
|
||||||
help_text='Designates whether the user can log into this admin site.', verbose_name='staff status')),
|
help_text='Designates whether the user can log into this admin site.',
|
||||||
|
verbose_name='staff status')),
|
||||||
('is_active', models.BooleanField(
|
('is_active', models.BooleanField(
|
||||||
default=True, help_text='Designates whether this user should be treated as active. Unselect this instead of deleting accounts.', verbose_name='active')),
|
default=True,
|
||||||
|
help_text='Designates whether this user should be treated as active. Unselect this instead of deleting accounts.',
|
||||||
|
verbose_name='active')),
|
||||||
('date_joined', models.DateTimeField(
|
('date_joined', models.DateTimeField(
|
||||||
default=django.utils.timezone.now, verbose_name='date joined')),
|
default=django.utils.timezone.now,
|
||||||
('gender', models.CharField(max_length=1, verbose_name='Geschlecht', choices=[
|
verbose_name='date joined')),
|
||||||
(b'm', 'M\xe4nnlich'), (b'f', 'Weiblich')])),
|
('gender',
|
||||||
|
models.CharField(max_length=1, verbose_name='Geschlecht',
|
||||||
|
choices=[
|
||||||
|
(b'm', 'M\xe4nnlich'),
|
||||||
|
(b'f', 'Weiblich')])),
|
||||||
('website', models.URLField(blank=True)),
|
('website', models.URLField(blank=True)),
|
||||||
('avatar', models.ImageField(storage=utils.OverwriteStorage(
|
('avatar', models.ImageField(storage=utils.OverwriteStorage(
|
||||||
), null=True, upload_to=membership.models.get_upload_path, blank=True)),
|
), null=True, upload_to=membership.models.get_upload_path,
|
||||||
|
blank=True)),
|
||||||
('membership', models.BooleanField(default=False,
|
('membership', models.BooleanField(default=False,
|
||||||
help_text='Ja, ich bin mit den Statuen einverstanden und m\xf6chte Mitglied werden.', verbose_name='Mitgliedschaft')),
|
help_text='Ja, ich bin mit den Statuen einverstanden und m\xf6chte Mitglied werden.',
|
||||||
|
verbose_name='Mitgliedschaft')),
|
||||||
('birthday', models.DateField(null=True,
|
('birthday', models.DateField(null=True,
|
||||||
verbose_name='Geburtstag', blank=True)),
|
verbose_name='Geburtstag',
|
||||||
|
blank=True)),
|
||||||
('telephone', models.CharField(max_length=30,
|
('telephone', models.CharField(max_length=30,
|
||||||
null=True, verbose_name='Telefon', blank=True)),
|
null=True,
|
||||||
|
verbose_name='Telefon',
|
||||||
|
blank=True)),
|
||||||
('street_name', models.CharField(max_length=75,
|
('street_name', models.CharField(max_length=75,
|
||||||
null=True, verbose_name='Adresse', blank=True)),
|
null=True,
|
||||||
|
verbose_name='Adresse',
|
||||||
|
blank=True)),
|
||||||
('post_code', models.PositiveSmallIntegerField(
|
('post_code', models.PositiveSmallIntegerField(
|
||||||
null=True, verbose_name='Postleitzahl', blank=True)),
|
null=True, verbose_name='Postleitzahl', blank=True)),
|
||||||
('city', models.CharField(max_length=75,
|
('city', models.CharField(max_length=75,
|
||||||
null=True, verbose_name='Ort', blank=True)),
|
null=True, verbose_name='Ort',
|
||||||
|
blank=True)),
|
||||||
('deposit', models.PositiveSmallIntegerField(
|
('deposit', models.PositiveSmallIntegerField(
|
||||||
default=0, editable=False)),
|
default=0, editable=False)),
|
||||||
('registration_date', models.DateField(auto_now_add=True)),
|
('registration_date', models.DateField(auto_now_add=True)),
|
||||||
('paid_until', models.DateField(null=True,
|
('paid_until', models.DateField(null=True,
|
||||||
verbose_name='Bezahlt bis', blank=True)),
|
verbose_name='Bezahlt bis',
|
||||||
|
blank=True)),
|
||||||
('confirmed', models.BooleanField(default=False,
|
('confirmed', models.BooleanField(default=False,
|
||||||
help_text='Diese Person hat ihre Mitgliedschaft bezahlt', verbose_name='Best\xe4tigt')),
|
help_text='Diese Person hat ihre Mitgliedschaft bezahlt',
|
||||||
|
verbose_name='Best\xe4tigt')),
|
||||||
('comment', models.TextField(blank=True)),
|
('comment', models.TextField(blank=True)),
|
||||||
('groups', models.ManyToManyField(related_query_name='user', related_name='user_set', to='auth.Group', blank=True,
|
('groups', models.ManyToManyField(related_query_name='user',
|
||||||
help_text='The groups this user belongs to. A user will get all permissions granted to each of their groups.', verbose_name='groups')),
|
related_name='user_set',
|
||||||
('user_permissions', models.ManyToManyField(related_query_name='user', related_name='user_set', to='auth.Permission',
|
to='auth.Group', blank=True,
|
||||||
blank=True, help_text='Specific permissions for this user.', verbose_name='user permissions')),
|
help_text='The groups this user belongs to. A user will get all permissions granted to each of their groups.',
|
||||||
|
verbose_name='groups')),
|
||||||
|
('user_permissions',
|
||||||
|
models.ManyToManyField(related_query_name='user',
|
||||||
|
related_name='user_set',
|
||||||
|
to='auth.Permission',
|
||||||
|
blank=True,
|
||||||
|
help_text='Specific permissions for this user.',
|
||||||
|
verbose_name='user permissions')),
|
||||||
],
|
],
|
||||||
options={
|
options={
|
||||||
'ordering': ('last_name', 'first_name'),
|
'ordering': ('last_name', 'first_name'),
|
||||||
@@ -86,11 +124,13 @@ class Migration(migrations.Migration):
|
|||||||
name='ActivationRequest',
|
name='ActivationRequest',
|
||||||
fields=[
|
fields=[
|
||||||
('id', models.AutoField(verbose_name='ID',
|
('id', models.AutoField(verbose_name='ID',
|
||||||
serialize=False, auto_created=True, primary_key=True)),
|
serialize=False, auto_created=True,
|
||||||
|
primary_key=True)),
|
||||||
('activation_key', models.CharField(
|
('activation_key', models.CharField(
|
||||||
max_length=40, verbose_name='Aktivierungsschl\xfcssel')),
|
max_length=40, verbose_name='Aktivierungsschl\xfcssel')),
|
||||||
('user', models.OneToOneField(
|
('user', models.OneToOneField(
|
||||||
verbose_name='Benutzer', to=settings.AUTH_USER_MODEL)),
|
verbose_name='Benutzer', to=settings.AUTH_USER_MODEL,
|
||||||
|
on_delete=models.CASCADE)),
|
||||||
],
|
],
|
||||||
options={
|
options={
|
||||||
'verbose_name': 'Ausstehende Aktivierung',
|
'verbose_name': 'Ausstehende Aktivierung',
|
||||||
|
|||||||
@@ -80,6 +80,7 @@ class ActivationRequest(models.Model):
|
|||||||
"""
|
"""
|
||||||
user = models.OneToOneField(
|
user = models.OneToOneField(
|
||||||
settings.AUTH_USER_MODEL,
|
settings.AUTH_USER_MODEL,
|
||||||
|
on_delete=models.CASCADE,
|
||||||
verbose_name=_('user')
|
verbose_name=_('user')
|
||||||
)
|
)
|
||||||
activation_key = models.CharField(_('activation key'), max_length=40)
|
activation_key = models.CharField(_('activation key'), max_length=40)
|
||||||
|
|||||||
Reference in New Issue
Block a user