added on_delete in models an migrations for django 2.0
compatibility.
This commit is contained in:
@@ -1,9 +1,9 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import models, migrations
|
||||
import django.db.models.deletion
|
||||
from django.conf import settings
|
||||
from django.db import models, migrations
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
@@ -44,7 +44,8 @@ class Migration(migrations.Migration):
|
||||
('date_modified', models.DateTimeField(
|
||||
auto_now=True, verbose_name='Bearbeitet')),
|
||||
('author', models.ForeignKey(
|
||||
verbose_name='Autor', to=settings.AUTH_USER_MODEL)),
|
||||
verbose_name='Autor', to=settings.AUTH_USER_MODEL,
|
||||
on_delete=models.CASCADE))
|
||||
],
|
||||
options={
|
||||
'ordering': ('-date_created',),
|
||||
@@ -144,7 +145,8 @@ class Migration(migrations.Migration):
|
||||
model_name='article',
|
||||
name='category',
|
||||
field=models.ForeignKey(
|
||||
verbose_name='Kategorie', to='content.Category'),
|
||||
verbose_name='Kategorie', to='content.Category',
|
||||
on_delete=models.CASCADE),
|
||||
),
|
||||
migrations.AlterUniqueTogether(
|
||||
name='page',
|
||||
|
||||
@@ -3,9 +3,9 @@ from ckeditor_uploader.fields import RichTextUploadingField
|
||||
from django.conf import settings
|
||||
from django.core.cache import cache
|
||||
from django.core.exceptions import ValidationError
|
||||
from django.urls import reverse
|
||||
from django.db import models
|
||||
from django.template.defaultfilters import slugify
|
||||
from django.urls import reverse
|
||||
from django.utils import timezone
|
||||
from django.utils.safestring import mark_safe
|
||||
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)
|
||||
content_de = RichTextUploadingField(_('Content'))
|
||||
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/',
|
||||
blank=True, null=True)
|
||||
slug = models.SlugField(_('Slug'), unique_for_month='date_created')
|
||||
author = models.ForeignKey(settings.AUTH_USER_MODEL,
|
||||
on_delete=models.PROTECT,
|
||||
verbose_name=_('Author'))
|
||||
status = models.SmallIntegerField(_('Status'), choices=STATUS_CHOICES,
|
||||
default=STATUS_PUBLISHED)
|
||||
@@ -275,12 +278,14 @@ class Page(models.Model):
|
||||
@property
|
||||
def description(self):
|
||||
"""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
|
||||
def menu_name(self):
|
||||
"""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
|
||||
def pdf_file(self):
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import models, migrations
|
||||
import events.models
|
||||
import django.db.models.deletion
|
||||
from django.db import models, migrations
|
||||
|
||||
import events.models
|
||||
import utils
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
]
|
||||
|
||||
@@ -17,7 +17,8 @@ class Migration(migrations.Migration):
|
||||
name='Event',
|
||||
fields=[
|
||||
('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')),
|
||||
('description', models.TextField(
|
||||
verbose_name='Beschreibung', blank=True)),
|
||||
@@ -26,13 +27,20 @@ class Migration(migrations.Migration):
|
||||
null=True, verbose_name='Ende', blank=True)),
|
||||
('url', models.URLField(verbose_name='Homepage', blank=True)),
|
||||
('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,
|
||||
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(
|
||||
default=0, editable=False)),
|
||||
('event_series', 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')),
|
||||
('event_series',
|
||||
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={
|
||||
'ordering': ('-start', '-end'),
|
||||
@@ -44,20 +52,310 @@ class Migration(migrations.Migration):
|
||||
name='Location',
|
||||
fields=[
|
||||
('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')),
|
||||
('description', models.TextField(
|
||||
verbose_name='Beschreibung', blank=True)),
|
||||
('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)),
|
||||
('postal_code', models.CharField(
|
||||
max_length=6, verbose_name='Postleitzahl')),
|
||||
('street_address', models.CharField(
|
||||
max_length=127, verbose_name='Stra\xdfe')),
|
||||
('locality', models.CharField(max_length=127, verbose_name='Ort')),
|
||||
('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')])),
|
||||
('locality',
|
||||
models.CharField(max_length=127, verbose_name='Ort')),
|
||||
('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={
|
||||
'verbose_name': 'Veranstaltungsort',
|
||||
@@ -67,6 +365,8 @@ class Migration(migrations.Migration):
|
||||
migrations.AddField(
|
||||
model_name='event',
|
||||
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 -*-
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import models, migrations
|
||||
import ckeditor.fields
|
||||
import events.models
|
||||
import easy_thumbnails.fields
|
||||
import django.db.models.deletion
|
||||
import utils
|
||||
import easy_thumbnails.fields
|
||||
from django.conf import settings
|
||||
from django.db import models, migrations
|
||||
|
||||
import events.models
|
||||
import utils
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||
('events', '0003_auto_20150823_2232'),
|
||||
@@ -22,18 +22,24 @@ class Migration(migrations.Migration):
|
||||
name='Photo',
|
||||
fields=[
|
||||
('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,
|
||||
verbose_name='Name', blank=True)),
|
||||
('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,
|
||||
verbose_name='Beschreibung', blank=True)),
|
||||
verbose_name='Beschreibung',
|
||||
blank=True)),
|
||||
('on_startpage', models.BooleanField(default=False,
|
||||
help_text='Display this Photo on the Startpage Teaser', verbose_name='Startpage')),
|
||||
('created_date', models.DateTimeField(verbose_name='Published on')),
|
||||
help_text='Display this Photo on the Startpage Teaser',
|
||||
verbose_name='Startpage')),
|
||||
('created_date',
|
||||
models.DateTimeField(verbose_name='Published on')),
|
||||
('views', models.PositiveIntegerField(default=0,
|
||||
verbose_name='Number of views', editable=False)),
|
||||
verbose_name='Number of views',
|
||||
editable=False)),
|
||||
],
|
||||
options={
|
||||
'ordering': ['created_date'],
|
||||
@@ -46,7 +52,8 @@ class Migration(migrations.Migration):
|
||||
migrations.AlterModelOptions(
|
||||
name='event',
|
||||
options={'ordering': (
|
||||
'start', 'end'), 'verbose_name': 'Termin', 'verbose_name_plural': 'Termine'},
|
||||
'start', 'end'), 'verbose_name': 'Termin',
|
||||
'verbose_name_plural': 'Termine'},
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='event',
|
||||
@@ -57,14 +64,19 @@ class Migration(migrations.Migration):
|
||||
migrations.AlterField(
|
||||
model_name='event',
|
||||
name='event_series',
|
||||
field=models.ForeignKey(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'),
|
||||
field=models.ForeignKey(
|
||||
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(
|
||||
model_name='event',
|
||||
name='image',
|
||||
field=easy_thumbnails.fields.ThumbnailerImageField(storage=utils.OverwriteStorage(
|
||||
), upload_to=events.models.get_upload_path, null=True, verbose_name='Bild', blank=True),
|
||||
field=easy_thumbnails.fields.ThumbnailerImageField(
|
||||
storage=utils.OverwriteStorage(
|
||||
), upload_to=events.models.get_upload_path, null=True,
|
||||
verbose_name='Bild', blank=True),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='location',
|
||||
@@ -75,17 +87,21 @@ class Migration(migrations.Migration):
|
||||
migrations.AlterField(
|
||||
model_name='location',
|
||||
name='image',
|
||||
field=easy_thumbnails.fields.ThumbnailerImageField(storage=utils.OverwriteStorage(
|
||||
), upload_to=events.models.get_upload_path, null=True, verbose_name='Bild', blank=True),
|
||||
field=easy_thumbnails.fields.ThumbnailerImageField(
|
||||
storage=utils.OverwriteStorage(
|
||||
), upload_to=events.models.get_upload_path, null=True,
|
||||
verbose_name='Bild', blank=True),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='photo',
|
||||
name='event',
|
||||
field=models.ForeignKey(to='events.Event'),
|
||||
field=models.ForeignKey(
|
||||
to='events.Event', on_delete=models.CASCADE),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='photo',
|
||||
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 django.conf import settings
|
||||
from django.core.exceptions import ValidationError
|
||||
from django.urls import reverse
|
||||
from django.db import models
|
||||
from django.db.models import Q
|
||||
from django.template.defaultfilters import slugify
|
||||
from django.urls import reverse
|
||||
from django.utils.timezone import now
|
||||
from django.utils.translation import ugettext as _
|
||||
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."""
|
||||
name = models.CharField(_('Name'), max_length=255)
|
||||
description = RichTextField(_("Description"), blank=True)
|
||||
location = models.ForeignKey('Location')
|
||||
location = models.ForeignKey('Location', on_delete=models.PROTECT)
|
||||
start = models.DateTimeField(_('Start'))
|
||||
end = models.DateTimeField(_('End'), blank=True, null=True)
|
||||
url = models.URLField(_('Homepage'), blank=True)
|
||||
@@ -220,13 +220,14 @@ class Photo(models.Model):
|
||||
upload_to=get_upload_path,
|
||||
storage=OverwriteStorage()
|
||||
)
|
||||
event = models.ForeignKey('events.Event')
|
||||
event = models.ForeignKey('events.Event', on_delete=models.PROTECT, )
|
||||
description = models.TextField(
|
||||
_("Description"),
|
||||
max_length=300,
|
||||
blank=True
|
||||
)
|
||||
photographer = models.ForeignKey(settings.AUTH_USER_MODEL)
|
||||
photographer = models.ForeignKey(settings.AUTH_USER_MODEL,
|
||||
on_delete=models.PROTECT)
|
||||
on_startpage = models.BooleanField(
|
||||
_("Startpage"),
|
||||
default=False,
|
||||
|
||||
@@ -1,12 +1,11 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import models, migrations
|
||||
from django.conf import settings
|
||||
from django.db import models, migrations
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||
('events', '0005_auto_20150907_2021'),
|
||||
@@ -17,15 +16,19 @@ class Migration(migrations.Migration):
|
||||
name='EventRanking',
|
||||
fields=[
|
||||
('id', models.AutoField(verbose_name='ID',
|
||||
serialize=False, auto_created=True, primary_key=True)),
|
||||
('placement', models.PositiveIntegerField(null=True, blank=True)),
|
||||
serialize=False, auto_created=True,
|
||||
primary_key=True)),
|
||||
('placement',
|
||||
models.PositiveIntegerField(null=True, blank=True)),
|
||||
('avg_placement', models.FloatField(default=4)),
|
||||
('avg_score', models.FloatField(default=0)),
|
||||
('hanchan_count', models.PositiveIntegerField(default=0)),
|
||||
('good_hanchans', models.PositiveIntegerField(default=0)),
|
||||
('won_hanchans', models.PositiveIntegerField(default=0)),
|
||||
('event', models.ForeignKey(to='events.Event')),
|
||||
('user', models.ForeignKey(to=settings.AUTH_USER_MODEL)),
|
||||
('event', models.ForeignKey(to='events.Event',
|
||||
on_delete=models.CASCADE)),
|
||||
('user', models.ForeignKey(to=settings.AUTH_USER_MODEL,
|
||||
on_delete=models.CASCADE)),
|
||||
],
|
||||
options={
|
||||
'ordering': ('placement', 'avg_placement', '-avg_score'),
|
||||
@@ -35,10 +38,13 @@ class Migration(migrations.Migration):
|
||||
name='Hanchan',
|
||||
fields=[
|
||||
('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(
|
||||
help_text='Wichtig damit die richtigen Hanchans in die Wertung kommen.', verbose_name='Beginn')),
|
||||
('player1_input_score', models.IntegerField(verbose_name='Punkte')),
|
||||
help_text='Wichtig damit die richtigen Hanchans in die Wertung kommen.',
|
||||
verbose_name='Beginn')),
|
||||
('player1_input_score',
|
||||
models.IntegerField(verbose_name='Punkte')),
|
||||
('player1_game_score', models.PositiveIntegerField(
|
||||
default=0, verbose_name='Punkte', editable=False)),
|
||||
('player1_placement', models.PositiveSmallIntegerField(
|
||||
@@ -50,8 +56,11 @@ class Migration(migrations.Migration):
|
||||
('player1_bonus_points', models.SmallIntegerField(
|
||||
null=True, editable=False, blank=True)),
|
||||
('player1_comment', models.CharField(verbose_name='Anmerkung',
|
||||
max_length=255, editable=False, blank=True)),
|
||||
('player2_input_score', models.IntegerField(verbose_name='Punkte')),
|
||||
max_length=255,
|
||||
editable=False,
|
||||
blank=True)),
|
||||
('player2_input_score',
|
||||
models.IntegerField(verbose_name='Punkte')),
|
||||
('player2_game_score', models.PositiveIntegerField(
|
||||
default=0, verbose_name='Punkte', editable=False)),
|
||||
('player2_placement', models.PositiveSmallIntegerField(
|
||||
@@ -63,8 +72,11 @@ class Migration(migrations.Migration):
|
||||
('player2_bonus_points', models.SmallIntegerField(
|
||||
null=True, editable=False, blank=True)),
|
||||
('player2_comment', models.CharField(verbose_name='Anmerkung',
|
||||
max_length=255, editable=False, blank=True)),
|
||||
('player3_input_score', models.IntegerField(verbose_name='Punkte')),
|
||||
max_length=255,
|
||||
editable=False,
|
||||
blank=True)),
|
||||
('player3_input_score',
|
||||
models.IntegerField(verbose_name='Punkte')),
|
||||
('player3_game_score', models.PositiveIntegerField(
|
||||
default=0, verbose_name='Punkte', editable=False)),
|
||||
('player3_placement', models.PositiveSmallIntegerField(
|
||||
@@ -76,8 +88,11 @@ class Migration(migrations.Migration):
|
||||
('player3_bonus_points', models.SmallIntegerField(
|
||||
null=True, editable=False, blank=True)),
|
||||
('player3_comment', models.CharField(verbose_name='Anmerkung',
|
||||
max_length=255, editable=False, blank=True)),
|
||||
('player4_input_score', models.IntegerField(verbose_name='Punkte')),
|
||||
max_length=255,
|
||||
editable=False,
|
||||
blank=True)),
|
||||
('player4_input_score',
|
||||
models.IntegerField(verbose_name='Punkte')),
|
||||
('player4_game_score', models.PositiveIntegerField(
|
||||
default=0, verbose_name='Punkte', editable=False)),
|
||||
('player4_placement', models.PositiveSmallIntegerField(
|
||||
@@ -89,22 +104,37 @@ class Migration(migrations.Migration):
|
||||
('player4_bonus_points', models.SmallIntegerField(
|
||||
null=True, editable=False, blank=True)),
|
||||
('player4_comment', models.CharField(verbose_name='Anmerkung',
|
||||
max_length=255, editable=False, blank=True)),
|
||||
('comment', models.TextField(verbose_name='Anmerkung', blank=True)),
|
||||
max_length=255,
|
||||
editable=False,
|
||||
blank=True)),
|
||||
('comment',
|
||||
models.TextField(verbose_name='Anmerkung', blank=True)),
|
||||
('confirmed', models.BooleanField(
|
||||
default=True, 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)),
|
||||
default=True,
|
||||
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(
|
||||
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+',
|
||||
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+',
|
||||
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+',
|
||||
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+',
|
||||
verbose_name='Spieler 4', to=settings.AUTH_USER_MODEL)),
|
||||
verbose_name='Spieler 4',
|
||||
to=settings.AUTH_USER_MODEL,
|
||||
on_delete=models.CASCADE)),
|
||||
],
|
||||
options={
|
||||
'ordering': ('-start',),
|
||||
@@ -116,8 +146,11 @@ class Migration(migrations.Migration):
|
||||
name='KyuDanRanking',
|
||||
fields=[
|
||||
('id', models.AutoField(verbose_name='ID',
|
||||
serialize=False, auto_created=True, primary_key=True)),
|
||||
('dan', models.PositiveSmallIntegerField(null=True, blank=True)),
|
||||
serialize=False, auto_created=True,
|
||||
primary_key=True)),
|
||||
(
|
||||
'dan',
|
||||
models.PositiveSmallIntegerField(null=True, blank=True)),
|
||||
('dan_points', models.PositiveIntegerField(default=0)),
|
||||
('kyu', models.PositiveSmallIntegerField(
|
||||
default=10, null=True, blank=True)),
|
||||
@@ -128,7 +161,8 @@ class Migration(migrations.Migration):
|
||||
('legacy_date', models.DateField(null=True, blank=True)),
|
||||
('legacy_dan_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={
|
||||
'ordering': ('-dan', '-dan_points', '-kyu_points'),
|
||||
@@ -140,15 +174,19 @@ class Migration(migrations.Migration):
|
||||
name='SeasonRanking',
|
||||
fields=[
|
||||
('id', models.AutoField(verbose_name='ID',
|
||||
serialize=False, auto_created=True, primary_key=True)),
|
||||
('season', models.PositiveSmallIntegerField(verbose_name='Saison')),
|
||||
('placement', models.PositiveIntegerField(null=True, blank=True)),
|
||||
serialize=False, auto_created=True,
|
||||
primary_key=True)),
|
||||
('season',
|
||||
models.PositiveSmallIntegerField(verbose_name='Saison')),
|
||||
('placement',
|
||||
models.PositiveIntegerField(null=True, blank=True)),
|
||||
('avg_placement', models.FloatField(null=True, blank=True)),
|
||||
('avg_score', models.FloatField(null=True, blank=True)),
|
||||
('hanchan_count', models.PositiveIntegerField(default=0)),
|
||||
('good_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={
|
||||
'ordering': ('placement', 'avg_placement', '-avg_score'),
|
||||
|
||||
@@ -9,8 +9,8 @@ from datetime import datetime, time
|
||||
|
||||
from django.conf import settings
|
||||
from django.core.exceptions import ValidationError
|
||||
from django.core.urlresolvers import reverse
|
||||
from django.db import models
|
||||
from django.urls import reverse
|
||||
from django.utils import timezone
|
||||
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,
|
||||
wenn der Event als Turnier markiert wurde.
|
||||
"""
|
||||
user = models.ForeignKey(settings.AUTH_USER_MODEL)
|
||||
event = models.ForeignKey(Event)
|
||||
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.PROTECT)
|
||||
event = models.ForeignKey(Event, on_delete=models.CASCADE)
|
||||
placement = models.PositiveIntegerField(blank=True, null=True)
|
||||
avg_placement = models.FloatField(default=4)
|
||||
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.
|
||||
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'),
|
||||
help_text=_('This is crucial to get the right Hanchans that scores')
|
||||
@@ -94,7 +94,7 @@ class Hanchan(models.Model):
|
||||
|
||||
player1 = models.ForeignKey(
|
||||
settings.AUTH_USER_MODEL,
|
||||
on_delete=models.CASCADE,
|
||||
on_delete=models.PROTECT,
|
||||
related_name='user_hanchan+',
|
||||
verbose_name=_('Player 1'))
|
||||
player1_input_score = models.IntegerField(_('Score'))
|
||||
@@ -113,7 +113,7 @@ class Hanchan(models.Model):
|
||||
|
||||
player2 = models.ForeignKey(
|
||||
settings.AUTH_USER_MODEL,
|
||||
on_delete=models.CASCADE,
|
||||
on_delete=models.PROTECT,
|
||||
related_name='user_hanchan+',
|
||||
verbose_name=_('Player 2'))
|
||||
player2_input_score = models.IntegerField(_('Score'))
|
||||
@@ -132,7 +132,7 @@ class Hanchan(models.Model):
|
||||
|
||||
player3 = models.ForeignKey(
|
||||
settings.AUTH_USER_MODEL,
|
||||
on_delete=models.CASCADE,
|
||||
on_delete=models.PROTECT,
|
||||
related_name='user_hanchan+',
|
||||
verbose_name=_('Player 3'))
|
||||
player3_input_score = models.IntegerField(_('Score'))
|
||||
@@ -151,7 +151,7 @@ class Hanchan(models.Model):
|
||||
|
||||
player4 = models.ForeignKey(
|
||||
settings.AUTH_USER_MODEL,
|
||||
on_delete=models.CASCADE,
|
||||
on_delete=models.PROTECT,
|
||||
related_name='user_hanchan+',
|
||||
verbose_name=_('Player 4'))
|
||||
player4_input_score = models.IntegerField(_('Score'))
|
||||
@@ -335,18 +335,21 @@ class KyuDanRanking(models.Model):
|
||||
Im Gegensatz zum Ladder Ranking ist das nicht Saison gebunden.
|
||||
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_points = models.PositiveIntegerField(default=0)
|
||||
max_dan_points = models.PositiveIntegerField(default=0)
|
||||
kyu = models.PositiveSmallIntegerField(default=10, blank=True, null=True)
|
||||
kyu_points = models.PositiveIntegerField(default=0)
|
||||
won_hanchans = models.PositiveIntegerField(default=0)
|
||||
good_hanchans = models.PositiveIntegerField(default=0)
|
||||
hanchan_count = models.PositiveIntegerField(default=0)
|
||||
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_kyu_points = models.PositiveIntegerField(default=0)
|
||||
legacy_hanchan_count = models.PositiveIntegerField(default=0)
|
||||
wins_in_a_row = models.PositiveIntegerField(default=0)
|
||||
last_hanchan_date = models.DateTimeField(blank=True, null=True)
|
||||
objects = managers.KyuDanRankingManager()
|
||||
@@ -356,8 +359,8 @@ class KyuDanRanking(models.Model):
|
||||
verbose_name = _(u'Kyū/Dan Ranking')
|
||||
verbose_name_plural = _(u'Kyū/Dan Rankings')
|
||||
|
||||
def __unicode__(self):
|
||||
if self.dan_points is not None:
|
||||
def __str__(self):
|
||||
if self.dan is not None:
|
||||
return u"%s - %d. Dan" % (self.user.username, self.dan or 1)
|
||||
else:
|
||||
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.wins_in_a_row = 0
|
||||
|
||||
# TODO: Komplett Überabreiten!
|
||||
def append_tournament_bonuspoints(self, hanchan):
|
||||
"""
|
||||
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
|
||||
).order_by('-start')
|
||||
last_hanchan_this_event = hanchans_this_event[0]
|
||||
if hanchan != last_hanchan_this_event:
|
||||
# Das braucht nur am Ende eines Turnieres gemacht werden.
|
||||
return False
|
||||
else:
|
||||
if hanchan != last_hanchan_this_event: return False
|
||||
event_ranking = EventRanking.objects.get(
|
||||
user=self.user,
|
||||
event=hanchan.event
|
||||
)
|
||||
if event_ranking.placement == 1:
|
||||
bonus_points += 4
|
||||
hanchan.player_comment += u'+4 Punkte Turnier gewonnen. '
|
||||
bonus_points += settings.TOURNAMENT_WIN_BONUSPOINTS
|
||||
hanchan.player_comment += u'+{0:d} Punkte Turnier gewonnen. '.format(
|
||||
settings.TOURNAMENT_WIN_BONUSPOINTS)
|
||||
if event_ranking.avg_placement == 1:
|
||||
bonus_points += 8
|
||||
hanchan.player_comment += u'+8 Pkt: alle Spiele des Turnieres gewonnen. '
|
||||
bonus_points += settings.TOURNAMENT_FLAWLESS_VICTORY_BONUSPOINTS
|
||||
hanchan.player_comment += u'+{0:d} Pkt: alle Spiele des Turnieres gewonnen. '.format(
|
||||
settings.TOURNAMENT_FLAWLESS_VICTORY_BONUSPOINTS)
|
||||
|
||||
if bonus_points and self.dan:
|
||||
hanchan.dan_points += bonus_points
|
||||
@@ -451,7 +453,7 @@ class KyuDanRanking(models.Model):
|
||||
force_recalc = True
|
||||
if force_recalc:
|
||||
# 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.kyu = None
|
||||
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: '
|
||||
'%(dan_points)d, bonus points: %(bonus_points)d',
|
||||
{'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,
|
||||
'dan_points': hanchan.dan_points or 0,
|
||||
'bonus_points': hanchan.bonus_points or 0}
|
||||
)
|
||||
self.save(force_update=True)
|
||||
|
||||
|
||||
def update_hanchan_points(self, hanchan):
|
||||
"""
|
||||
Berechne die Kyu bzw. Dan Punkte für eine Hanchan neu.
|
||||
@@ -523,7 +525,7 @@ class KyuDanRanking(models.Model):
|
||||
"""
|
||||
hanchan.kyu_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:
|
||||
1. Platz 4 Punkte
|
||||
2. Platz 3 Punkte
|
||||
@@ -547,6 +549,7 @@ class KyuDanRanking(models.Model):
|
||||
hanchan.dan_points = -1
|
||||
elif hanchan.placement == 4:
|
||||
hanchan.dan_points = -2
|
||||
# otherwise player must be in the kyu ranking
|
||||
elif hanchan.game_score >= 60000:
|
||||
hanchan.kyu_points = 3
|
||||
elif hanchan.game_score >= 30000:
|
||||
@@ -568,38 +571,30 @@ class KyuDanRanking(models.Model):
|
||||
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):
|
||||
if self.dan and self.dan_points < 0:
|
||||
self.dan_points = 0
|
||||
self.dan = 1
|
||||
elif self.dan or self.dan_points > 0:
|
||||
print(self.user, self.dan, self.kyu)
|
||||
old_dan = self.dan
|
||||
for min_points, dan_rank in settings.DAN_RANKS:
|
||||
if self.dan_points > min_points:
|
||||
self.dan = dan_rank
|
||||
break
|
||||
if old_dan is None or self.dan > old_dan:
|
||||
self.wins_in_a_row = 0
|
||||
elif self.kyu_points < 1:
|
||||
self.kyu_points = 0
|
||||
self.kyu = 10
|
||||
if settings.DAN_ALLOW_DROP_DOWN and (self.dan or self.dan_points > 0):
|
||||
self.dan = max((dan for min_points, dan in settings.DAN_RANKS if
|
||||
self.dan_points > min_points))
|
||||
elif self.dan or self.dan_points > 0:
|
||||
self.dan = max((dan for min_points, dan in settings.DAN_RANKS if
|
||||
self.max_dan_points > min_points))
|
||||
elif self.kyu_points > 50:
|
||||
self.dan = 1
|
||||
self.kyu = None
|
||||
self.dan_points = 0
|
||||
self.kyu = None
|
||||
self.kyu_points = 0
|
||||
self.wins_in_a_row = 0
|
||||
else:
|
||||
for min_points, kyu_rank in settings.KYU_RANKS:
|
||||
if self.kyu_points > min_points:
|
||||
self.kyu = kyu_rank
|
||||
break
|
||||
print(self, self.kyu_points)
|
||||
self.kyu = max((kyu for min_points, kyu in settings.KYU_RANKS if
|
||||
self.kyu_points > min_points))
|
||||
self.wins_in_a_row = 0 if self.dan > old_dan else self.wins_in_a_row
|
||||
|
||||
|
||||
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'))
|
||||
placement = models.PositiveIntegerField(blank=True, null=True)
|
||||
avg_placement = models.FloatField(blank=True, null=True)
|
||||
|
||||
@@ -37,19 +37,19 @@ class Migration(migrations.Migration):
|
||||
('season', models.PositiveSmallIntegerField(
|
||||
verbose_name='Saison', editable=False, db_index=True)),
|
||||
('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='+',
|
||||
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='+',
|
||||
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='+',
|
||||
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='+',
|
||||
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='+',
|
||||
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='+',
|
||||
verbose_name='Spieler 6', to=settings.AUTH_USER_MODEL)),
|
||||
verbose_name='Spieler 6', to=settings.AUTH_USER_MODEL, on_delete=models.CASCADE)),
|
||||
],
|
||||
),
|
||||
migrations.CreateModel(
|
||||
@@ -65,7 +65,7 @@ class Migration(migrations.Migration):
|
||||
('games_count', models.PositiveSmallIntegerField(default=0)),
|
||||
('games_good', 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={
|
||||
'ordering': ('-season', 'placement', 'avg_placement', '-avg_score'),
|
||||
|
||||
@@ -2,11 +2,11 @@
|
||||
|
||||
import logging
|
||||
|
||||
from django.urls import reverse
|
||||
from django.db import models
|
||||
from django.db.models.signals import post_delete, post_save
|
||||
from django.utils.translation import ugettext as _
|
||||
from django.dispatch import receiver
|
||||
from django.urls import reverse
|
||||
from django.utils.translation import ugettext as _
|
||||
|
||||
from events.models import Event
|
||||
from . import settings, managers
|
||||
@@ -16,40 +16,47 @@ class Game(models.Model):
|
||||
"""to record a complete game with 6 different players."""
|
||||
|
||||
_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)
|
||||
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_placement = models.PositiveSmallIntegerField(editable=False)
|
||||
|
||||
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_placement = models.PositiveSmallIntegerField(editable=False)
|
||||
|
||||
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_placement = models.PositiveSmallIntegerField(editable=False)
|
||||
|
||||
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_placement = models.PositiveSmallIntegerField(editable=False)
|
||||
|
||||
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_placement = models.PositiveSmallIntegerField(editable=False)
|
||||
|
||||
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_placement = models.PositiveSmallIntegerField(editable=False)
|
||||
@@ -69,7 +76,6 @@ class Game(models.Model):
|
||||
"""Display rankings by placement, best players first."""
|
||||
ordering = ('-event__start', '-id')
|
||||
|
||||
|
||||
def __str__(self):
|
||||
return _("Mai-Star Game with {0} from {1:%Y-%m-%d}").format(
|
||||
self.player_names, self.event.start
|
||||
@@ -143,7 +149,7 @@ class Game(models.Model):
|
||||
|
||||
class Ranking(models.Model):
|
||||
"""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"))
|
||||
placement = models.PositiveIntegerField(blank=True, null=True)
|
||||
avg_placement = models.PositiveSmallIntegerField(blank=True, null=True)
|
||||
|
||||
@@ -1,17 +1,17 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import models, migrations
|
||||
import django.core.validators
|
||||
import django.contrib.auth.models
|
||||
from django.conf import settings
|
||||
import django.core.validators
|
||||
import django.utils.timezone
|
||||
from django.conf import settings
|
||||
from django.db import models, migrations
|
||||
|
||||
import membership.models
|
||||
import utils
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('auth', '0006_require_contenttypes_0002'),
|
||||
]
|
||||
@@ -21,56 +21,94 @@ class Migration(migrations.Migration):
|
||||
name='Membership',
|
||||
fields=[
|
||||
('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(
|
||||
max_length=128, verbose_name='password')),
|
||||
('last_login', models.DateTimeField(
|
||||
null=True, verbose_name='last login', blank=True)),
|
||||
('is_superuser', models.BooleanField(default=False,
|
||||
help_text='Designates that this user has all permissions without explicitly assigning them.', verbose_name='superuser status')),
|
||||
('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')),
|
||||
help_text='Designates that this user has all permissions without explicitly assigning them.',
|
||||
verbose_name='superuser status')),
|
||||
('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,
|
||||
verbose_name='first name', blank=True)),
|
||||
verbose_name='first name',
|
||||
blank=True)),
|
||||
('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,
|
||||
verbose_name='email address', blank=True)),
|
||||
verbose_name='email address',
|
||||
blank=True)),
|
||||
('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(
|
||||
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(
|
||||
default=django.utils.timezone.now, verbose_name='date joined')),
|
||||
('gender', models.CharField(max_length=1, verbose_name='Geschlecht', choices=[
|
||||
(b'm', 'M\xe4nnlich'), (b'f', 'Weiblich')])),
|
||||
default=django.utils.timezone.now,
|
||||
verbose_name='date joined')),
|
||||
('gender',
|
||||
models.CharField(max_length=1, verbose_name='Geschlecht',
|
||||
choices=[
|
||||
(b'm', 'M\xe4nnlich'),
|
||||
(b'f', 'Weiblich')])),
|
||||
('website', models.URLField(blank=True)),
|
||||
('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,
|
||||
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,
|
||||
verbose_name='Geburtstag', blank=True)),
|
||||
verbose_name='Geburtstag',
|
||||
blank=True)),
|
||||
('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,
|
||||
null=True, verbose_name='Adresse', blank=True)),
|
||||
null=True,
|
||||
verbose_name='Adresse',
|
||||
blank=True)),
|
||||
('post_code', models.PositiveSmallIntegerField(
|
||||
null=True, verbose_name='Postleitzahl', blank=True)),
|
||||
('city', models.CharField(max_length=75,
|
||||
null=True, verbose_name='Ort', blank=True)),
|
||||
null=True, verbose_name='Ort',
|
||||
blank=True)),
|
||||
('deposit', models.PositiveSmallIntegerField(
|
||||
default=0, editable=False)),
|
||||
('registration_date', models.DateField(auto_now_add=True)),
|
||||
('paid_until', models.DateField(null=True,
|
||||
verbose_name='Bezahlt bis', blank=True)),
|
||||
verbose_name='Bezahlt bis',
|
||||
blank=True)),
|
||||
('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)),
|
||||
('groups', models.ManyToManyField(related_query_name='user', related_name='user_set', to='auth.Group', blank=True,
|
||||
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')),
|
||||
('groups', models.ManyToManyField(related_query_name='user',
|
||||
related_name='user_set',
|
||||
to='auth.Group', blank=True,
|
||||
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={
|
||||
'ordering': ('last_name', 'first_name'),
|
||||
@@ -86,11 +124,13 @@ class Migration(migrations.Migration):
|
||||
name='ActivationRequest',
|
||||
fields=[
|
||||
('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(
|
||||
max_length=40, verbose_name='Aktivierungsschl\xfcssel')),
|
||||
('user', models.OneToOneField(
|
||||
verbose_name='Benutzer', to=settings.AUTH_USER_MODEL)),
|
||||
verbose_name='Benutzer', to=settings.AUTH_USER_MODEL,
|
||||
on_delete=models.CASCADE)),
|
||||
],
|
||||
options={
|
||||
'verbose_name': 'Ausstehende Aktivierung',
|
||||
|
||||
@@ -80,6 +80,7 @@ class ActivationRequest(models.Model):
|
||||
"""
|
||||
user = models.OneToOneField(
|
||||
settings.AUTH_USER_MODEL,
|
||||
on_delete=models.CASCADE,
|
||||
verbose_name=_('user')
|
||||
)
|
||||
activation_key = models.CharField(_('activation key'), max_length=40)
|
||||
|
||||
Reference in New Issue
Block a user