Some preparation for upgrade.
authorRadek Czajka <rczajka@rczajka.pl>
Mon, 29 Jul 2019 13:23:16 +0000 (15:23 +0200)
committerRadek Czajka <rczajka@rczajka.pl>
Mon, 29 Jul 2019 13:23:16 +0000 (15:23 +0200)
58 files changed:
src/api/fields.py
src/api/migrations/0001_initial.py
src/api/migrations/0003_bookuserdata.py
src/api/models.py
src/catalogue/feeds.py
src/catalogue/management/commands/report_dead_links.py
src/catalogue/migrations/0001_initial.py
src/catalogue/migrations/0010_bookpopularity.py
src/catalogue/models/book.py
src/catalogue/models/bookmedia.py
src/catalogue/models/collection.py
src/catalogue/models/fragment.py
src/catalogue/models/tag.py
src/catalogue/templatetags/catalogue_tags.py
src/catalogue/views.py
src/contact/forms.py
src/contact/migrations/0001_initial.py
src/contact/models.py
src/dictionary/migrations/0001_initial.py
src/dictionary/migrations/0002_auto_20141006_1422.py
src/dictionary/models.py
src/funding/migrations/0001_initial.py
src/funding/migrations/0004_auto_20190729_1450.py [new file with mode: 0644]
src/funding/models.py
src/funding/views.py
src/infopages/models.py
src/isbn/migrations/0001_initial.py
src/isbn/migrations/0005_auto_20190729_1450.py [new file with mode: 0644]
src/isbn/models.py
src/isbn/views.py
src/lesmianator/migrations/0001_initial.py
src/lesmianator/migrations/0003_auto_20190729_1450.py [new file with mode: 0644]
src/lesmianator/models.py
src/libraries/models.py
src/newsletter/views.py
src/opds/views.py
src/paypal/migrations/0001_initial.py
src/paypal/migrations/0003_auto_20190729_1450.py [new file with mode: 0644]
src/paypal/models.py
src/paypal/rest.py
src/pdcounter/models.py
src/picture/migrations/0001_initial.py
src/picture/models.py
src/picture/templatetags/picture_tags.py
src/polls/migrations/0001_initial.py
src/polls/models.py
src/polls/views.py
src/push/views.py
src/search/context_processors.py
src/social/migrations/0001_initial.py
src/social/models.py
src/suggest/forms.py
src/suggest/migrations/0001_initial.py
src/suggest/migrations/0003_auto_20190729_1450.py [new file with mode: 0644]
src/suggest/models.py
src/suggest/views.py
src/waiter/models.py
src/wolnelektury/migrations/getpaid/0001_initial.py

index 278af6a..b6269da 100644 (file)
@@ -3,7 +3,7 @@
 #
 from rest_framework import serializers
 from sorl.thumbnail import default
-from django.core.urlresolvers import reverse
+from django.urls import reverse
 from club.models import Membership
 
 
index 4d20304..a4a8a84 100644 (file)
@@ -1,7 +1,5 @@
-# -*- coding: utf-8 -*-
-from __future__ import unicode_literals
-
 from django.db import models, migrations
+import django.db.models.deletion
 
 
 class Migration(migrations.Migration):
@@ -20,7 +18,7 @@ class Migration(migrations.Migration):
                 ('category', models.CharField(db_index=True, max_length=64, null=True, blank=True)),
                 ('created_at', models.DateTimeField(editable=False, db_index=True)),
                 ('deleted_at', models.DateTimeField(auto_now_add=True, db_index=True)),
-                ('content_type', models.ForeignKey(to='contenttypes.ContentType')),
+                ('content_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='contenttypes.ContentType')),
             ],
             options={
             },
index 11a2f8f..2a70fb5 100644 (file)
@@ -1,7 +1,5 @@
-# -*- coding: utf-8 -*-
-from __future__ import unicode_literals
-
 from django.db import migrations, models
+import django.db.models.deletion
 from django.conf import settings
 
 
@@ -19,8 +17,8 @@ class Migration(migrations.Migration):
             fields=[
                 ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
                 ('complete', models.BooleanField(default=False)),
-                ('book', models.ForeignKey(to='catalogue.Book')),
-                ('user', models.ForeignKey(to=settings.AUTH_USER_MODEL)),
+                ('book', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='catalogue.Book')),
+                ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
             ],
         ),
     ]
index 9a86c2c..1e25c36 100644 (file)
@@ -1,4 +1,3 @@
-# -*- coding: utf-8 -*-
 # This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
 # Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
 #
@@ -15,7 +14,7 @@ from catalogue.models import Book, Tag
 class Deleted(models.Model):
     object_id = models.IntegerField()
     slug = models.SlugField(_('slug'), max_length=120, blank=True, db_index=True)
-    content_type = models.ForeignKey(ContentType)
+    content_type = models.ForeignKey(ContentType, models.CASCADE)
     category = models.CharField(max_length=64, null=True, blank=True, db_index=True)
     created_at = models.DateTimeField(editable=False, db_index=True)
     deleted_at = models.DateTimeField(auto_now_add=True, db_index=True)
@@ -43,8 +42,8 @@ pre_delete.connect(_pre_delete_handler)
 
 
 class BookUserData(models.Model):
-    book = models.ForeignKey(Book)
-    user = models.ForeignKey(User)
+    book = models.ForeignKey(Book, models.CASCADE)
+    user = models.ForeignKey(User, models.CASCADE)
     complete = models.BooleanField(default=False)
     last_changed = models.DateTimeField(auto_now=True)
 
@@ -86,7 +85,7 @@ class Consumer(models.Model):
     key = models.CharField(max_length=KEY_SIZE)
     secret = models.CharField(max_length=SECRET_SIZE)
     status = models.CharField(max_length=16, choices=CONSUMER_STATES, default='pending')
-    user = models.ForeignKey(settings.AUTH_USER_MODEL, null=True, blank=True, related_name='consumers')
+    user = models.ForeignKey(settings.AUTH_USER_MODEL, models.CASCADE, null=True, blank=True, related_name='consumers')
 
     def __str__(self):
         return u"Consumer %s with key %s" % (self.name, self.key)
@@ -102,8 +101,8 @@ class Token(models.Model):
     token_type = models.IntegerField(choices=TOKEN_TYPES)
     timestamp = models.IntegerField()
     is_approved = models.BooleanField(default=False)
-    user = models.ForeignKey(settings.AUTH_USER_MODEL, null=True, blank=True, related_name='tokens')
-    consumer = models.ForeignKey(Consumer)
+    user = models.ForeignKey(settings.AUTH_USER_MODEL, models.CASCADE, null=True, blank=True, related_name='tokens')
+    consumer = models.ForeignKey(Consumer, models.CASCADE)
 
     def __str__(self):
         return u"%s Token %s for %s" % (self.get_token_type_display(), self.key, self.consumer)
index 0b7e4d4..f0305e7 100644 (file)
@@ -1,10 +1,9 @@
-# -*- coding: utf-8 -*-
 # This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
 # Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
 #
 from django.contrib.sites.models import Site
 from django.contrib.syndication.views import Feed
-from django.core.urlresolvers import reverse
+from django.urls import reverse
 
 from catalogue import models
 
index a6ee2a9..ddcc216 100644 (file)
@@ -11,7 +11,7 @@ class Command(BaseCommand):
         from catalogue.models import Book
         from picture.models import Picture
         from urllib.request import urlopen, HTTPError, URLError
-        from django.core.urlresolvers import reverse
+        from django.urls import reverse
         from django.contrib.sites.models import Site
 
         domain = Site.objects.get_current().domain
index 37d502b..987d811 100644 (file)
@@ -1,7 +1,5 @@
-# -*- coding: utf-8 -*-
-from __future__ import unicode_literals
-
 from django.db import models, migrations
+import django.db.models.deletion
 import fnpdjango.storage
 import jsonfield.fields
 import catalogue.fields
@@ -45,7 +43,7 @@ class Migration(migrations.Migration):
                 ('mobi_file', catalogue.fields.EbookField('mobi', default='', storage=fnpdjango.storage.BofhFileSystemStorage(), upload_to=catalogue.models.book._mobi_upload_to, max_length=255, blank=True, verbose_name='MOBI file')),
                 ('html_file', catalogue.fields.EbookField('html', default='', storage=fnpdjango.storage.BofhFileSystemStorage(), upload_to=catalogue.models.book._html_upload_to, max_length=255, blank=True, verbose_name='HTML file')),
                 ('xml_file', catalogue.fields.EbookField('xml', default='', storage=fnpdjango.storage.BofhFileSystemStorage(), upload_to=catalogue.models.book._xml_upload_to, max_length=255, blank=True, verbose_name='XML file')),
-                ('parent', models.ForeignKey(related_name='children', blank=True, to='catalogue.Book', null=True)),
+                ('parent', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='children', blank=True, to='catalogue.Book', null=True)),
             ],
             options={
                 'ordering': ('sort_key',),
@@ -64,7 +62,7 @@ class Migration(migrations.Migration):
                 ('uploaded_at', models.DateTimeField(auto_now_add=True, verbose_name='creation date', db_index=True)),
                 ('extra_info', jsonfield.fields.JSONField(default={}, verbose_name='Additional information', editable=False)),
                 ('source_sha1', models.CharField(max_length=40, null=True, editable=False, blank=True)),
-                ('book', models.ForeignKey(related_name='media', to='catalogue.Book')),
+                ('book', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='media', to='catalogue.Book')),
             ],
             options={
                 'ordering': ('type', 'name'),
@@ -114,7 +112,7 @@ class Migration(migrations.Migration):
                 ('text', models.TextField()),
                 ('short_text', models.TextField(editable=False)),
                 ('anchor', models.CharField(max_length=120)),
-                ('book', models.ForeignKey(related_name='fragments', to='catalogue.Book')),
+                ('book', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='fragments', to='catalogue.Book')),
             ],
             options={
                 'ordering': ('book', 'anchor'),
@@ -188,7 +186,7 @@ class Migration(migrations.Migration):
                 ('wiki_link_uk', models.CharField(max_length=240, null=True, blank=True)),
                 ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='creation date', db_index=True)),
                 ('changed_at', models.DateTimeField(auto_now=True, verbose_name='creation date', db_index=True)),
-                ('user', models.ForeignKey(blank=True, to=settings.AUTH_USER_MODEL, null=True)),
+                ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, blank=True, to=settings.AUTH_USER_MODEL, null=True)),
             ],
             options={
                 'ordering': ('sort_key',),
@@ -202,8 +200,8 @@ class Migration(migrations.Migration):
             fields=[
                 ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
                 ('object_id', models.PositiveIntegerField(verbose_name='object id', db_index=True)),
-                ('content_type', models.ForeignKey(verbose_name='content type', to='contenttypes.ContentType')),
-                ('tag', models.ForeignKey(related_name='items', verbose_name='tag', to='catalogue.Tag')),
+                ('content_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, verbose_name='content type', to='contenttypes.ContentType')),
+                ('tag', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='items', verbose_name='tag', to='catalogue.Tag')),
             ],
             options={
                 'db_table': 'catalogue_tag_relation',
index 42fd6cb..608af9c 100644 (file)
@@ -1,7 +1,5 @@
-# -*- coding: utf-8 -*-
-from __future__ import unicode_literals
-
 from django.db import migrations, models
+import django.db.models.deletion
 
 
 class Migration(migrations.Migration):
@@ -16,7 +14,7 @@ class Migration(migrations.Migration):
             fields=[
                 ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
                 ('count', models.IntegerField(default=0)),
-                ('book', models.OneToOneField(related_name='popularity', to='catalogue.Book')),
+                ('book', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='popularity', to='catalogue.Book')),
             ],
         ),
     ]
index 61d20fd..2b64ec8 100644 (file)
@@ -1,4 +1,3 @@
-# -*- coding: utf-8 -*-
 # This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
 # Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
 #
@@ -10,10 +9,9 @@ import re
 import urllib
 from django.conf import settings
 from django.db import connection, models, transaction
-from django.db.models import permalink
 import django.dispatch
 from django.contrib.contenttypes.fields import GenericRelation
-from django.core.urlresolvers import reverse
+from django.urls import reverse
 from django.utils.translation import ugettext_lazy as _, get_language
 from django.utils.deconstruct import deconstructible
 import jsonfield
@@ -103,7 +101,7 @@ class Book(models.Model):
     ebook_formats = constants.EBOOK_FORMATS
     formats = ebook_formats + ['html', 'xml']
 
-    parent = models.ForeignKey('self', blank=True, null=True, related_name='children')
+    parent = models.ForeignKey('self', models.CASCADE, blank=True, null=True, related_name='children')
     ancestor = models.ManyToManyField('self', blank=True, editable=False, related_name='descendant', symmetrical=False)
 
     cached_author = models.CharField(blank=True, max_length=240, db_index=True)
@@ -207,9 +205,8 @@ class Book(models.Model):
 
         return ret
 
-    @permalink
     def get_absolute_url(self):
-        return 'book_detail', [self.slug]
+        return reverse('book_detail', args=[self.slug])
 
     def gallery_path(self):
         return gallery_path(self.slug)
@@ -829,5 +826,5 @@ add_file_fields()
 
 
 class BookPopularity(models.Model):
-    book = models.OneToOneField(Book, related_name='popularity')
+    book = models.OneToOneField(Book, models.CASCADE, related_name='popularity')
     count = models.IntegerField(default=0, db_index=True)
index 4532c86..9f71364 100644 (file)
@@ -1,4 +1,3 @@
-# -*- coding: utf-8 -*-
 # This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
 # Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
 #
@@ -35,7 +34,7 @@ class BookMedia(models.Model):
     file = models.FileField(_('file'), max_length=600, upload_to=_file_upload_to, storage=OverwriteStorage())
     uploaded_at = models.DateTimeField(_('creation date'), auto_now_add=True, editable=False, db_index=True)
     extra_info = jsonfield.JSONField(_('extra information'), default={}, editable=False)
-    book = models.ForeignKey('Book', related_name='media')
+    book = models.ForeignKey('Book', models.CASCADE, related_name='media')
     source_sha1 = models.CharField(null=True, blank=True, max_length=40, editable=False)
 
     def __str__(self):
index 3c4b475..f059cb3 100644 (file)
@@ -1,9 +1,9 @@
-# -*- coding: utf-8 -*-
 # This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
 # Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
 #
 from django.conf import settings
 from django.db import models
+from django.urls import reverse
 from django.utils.translation import ugettext_lazy as _
 from ssify import flush_ssi_includes
 import re
@@ -33,9 +33,8 @@ class Collection(models.Model):
         except AttributeError:
             return ''
 
-    @models.permalink
     def get_absolute_url(self):
-        return "collection", [self.slug]
+        return reverse("collection", args=[self.slug])
 
     def get_query(self):
         slugs = self.book_slugs.split()
index dc159a5..ef15f85 100644 (file)
@@ -1,10 +1,9 @@
-# -*- coding: utf-8 -*-
 # This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
 # Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
 #
 from django.conf import settings
 from django.contrib.contenttypes.fields import GenericRelation
-from django.core.urlresolvers import reverse
+from django.urls import reverse
 from django.db import models
 from django.utils.translation import ugettext_lazy as _
 from newtagging import managers
@@ -17,7 +16,7 @@ class Fragment(models.Model):
     text = models.TextField()
     short_text = models.TextField(editable=False)
     anchor = models.CharField(max_length=120)
-    book = models.ForeignKey('Book', related_name='fragments')
+    book = models.ForeignKey('Book', models.CASCADE, related_name='fragments')
 
     objects = models.Manager()
     tagged = managers.ModelTaggedItemManager(Tag)
index 1b41601..dac96e2 100644 (file)
@@ -1,4 +1,3 @@
-# -*- coding: utf-8 -*-
 # This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
 # Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
 #
@@ -9,9 +8,9 @@ from django.core.cache import caches
 from django.contrib.auth.models import User
 from django.core.exceptions import ObjectDoesNotExist
 from django.db import models
-from django.db.models import permalink
 from django.db.models.query import Prefetch
 from django.dispatch import Signal
+from django.urls import reverse
 from django.utils.translation import ugettext_lazy as _
 
 from newtagging.models import TagManager, TaggedItemManager
@@ -32,8 +31,8 @@ TAG_CATEGORIES = (
 
 class TagRelation(models.Model):
 
-    tag = models.ForeignKey('Tag', verbose_name=_('tag'), related_name='items')
-    content_type = models.ForeignKey(ContentType, verbose_name=_('content type'))
+    tag = models.ForeignKey('Tag', models.CASCADE, verbose_name=_('tag'), related_name='items')
+    content_type = models.ForeignKey(ContentType, models.CASCADE, verbose_name=_('content type'))
     object_id = models.PositiveIntegerField(_('object id'), db_index=True)
     content_object = GenericForeignKey('content_type', 'object_id')
 
@@ -65,7 +64,7 @@ class Tag(models.Model):
     for_books = models.BooleanField(default=False)
     for_pictures = models.BooleanField(default=False)
 
-    user = models.ForeignKey(User, blank=True, null=True)
+    user = models.ForeignKey(User, models.CASCADE, blank=True, null=True)
     gazeta_link = models.CharField(blank=True, max_length=240)
     culturepl_link = models.CharField(blank=True, max_length=240)
     wiki_link = models.CharField(blank=True, max_length=240)
@@ -173,13 +172,11 @@ class Tag(models.Model):
     def category_plural(self):
         return self.category + 's'
 
-    @permalink
     def get_absolute_url(self):
-        return 'tagged_object_list', [self.url_chunk]
+        return reverse('tagged_object_list', args=[self.url_chunk])
 
-    @permalink
     def get_absolute_gallery_url(self):
-        return 'tagged_object_list_gallery', [self.url_chunk]
+        return reverse('tagged_object_list_gallery', args=[self.url_chunk])
 
     def has_description(self):
         return len(self.description) > 0
index 2670e58..af0370a 100644 (file)
@@ -8,7 +8,7 @@ from django.contrib.contenttypes.models import ContentType
 from django.conf import settings
 from django import template
 from django.template import Node, Variable, Template, Context
-from django.core.urlresolvers import reverse
+from django.urls import reverse
 from django.utils.cache import add_never_cache_headers
 from django.utils.safestring import mark_safe
 from django.utils.translation import ugettext as _
index 632eff8..b826fc2 100644 (file)
@@ -9,7 +9,7 @@ from django.http.response import HttpResponseForbidden
 from django.template.loader import render_to_string
 from django.shortcuts import get_object_or_404, render, redirect
 from django.http import HttpResponse, HttpResponseRedirect, Http404, HttpResponsePermanentRedirect
-from django.core.urlresolvers import reverse
+from django.urls import reverse
 from django.db.models import Q, QuerySet
 from django.contrib.auth.decorators import login_required, user_passes_test
 from django.utils.http import urlquote_plus
index 3cdf59d..ff1687a 100644 (file)
@@ -1,13 +1,12 @@
-# -*- coding: utf-8 -*-
 from django.contrib.sites.models import Site
 from django.core.exceptions import ValidationError
 from django.core.files.uploadedfile import UploadedFile
 from django.core.mail import send_mail, mail_managers
-from django.core.urlresolvers import reverse
 from django.core.validators import validate_email
 from django import forms
 from django.template.loader import render_to_string
 from django.template import RequestContext
+from django.urls import reverse
 from django.utils.translation import ugettext_lazy as _
 
 
index 1c0a565..216c4c5 100644 (file)
@@ -1,7 +1,5 @@
-# -*- coding: utf-8 -*-
-from __future__ import unicode_literals
-
 from django.db import migrations, models
+import django.db.models.deletion
 import jsonfield.fields
 
 
@@ -38,6 +36,6 @@ class Migration(migrations.Migration):
         migrations.AddField(
             model_name='attachment',
             name='contact',
-            field=models.ForeignKey(to='contact.Contact'),
+            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='contact.Contact'),
         ),
     ]
index e44bd9b..aae3f2d 100644 (file)
@@ -1,7 +1,7 @@
-# -*- coding: utf-8 -*-
 import yaml
 from hashlib import sha1
 from django.db import models
+from django.urls import reverse
 from django.utils.encoding import smart_text
 from django.utils.translation import ugettext_lazy as _
 from jsonfield import JSONField
@@ -49,13 +49,12 @@ class Contact(models.Model):
 
 
 class Attachment(models.Model):
-    contact = models.ForeignKey(Contact)
+    contact = models.ForeignKey(Contact, models.CASCADE)
     tag = models.CharField(max_length=64)
     file = models.FileField(upload_to='contact/attachment')
 
-    @models.permalink
     def get_absolute_url(self):
-        return 'contact_attachment', [self.contact_id, self.tag]
+        return reverse('contact_attachment', args=[self.contact_id, self.tag])
 
 
 __import__(app_settings.FORMS_MODULE)
index 1908a84..60ea4b6 100644 (file)
@@ -1,7 +1,5 @@
-# -*- coding: utf-8 -*-
-from __future__ import unicode_literals
-
 from django.db import models, migrations
+import django.db.models.deletion
 
 
 class Migration(migrations.Migration):
@@ -18,7 +16,7 @@ class Migration(migrations.Migration):
                 ('anchor', models.CharField(max_length=64)),
                 ('html', models.TextField()),
                 ('sort_key', models.CharField(max_length=128, db_index=True)),
-                ('book', models.ForeignKey(to='catalogue.Book')),
+                ('book', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='catalogue.Book')),
             ],
             options={
                 'ordering': ['sort_key'],
index a9bad32..f51e83f 100644 (file)
@@ -1,7 +1,5 @@
-# -*- coding: utf-8 -*-
-from __future__ import unicode_literals
-
 from django.db import models, migrations
+import django.db.models.deletion
 
 
 class Migration(migrations.Migration):
@@ -17,8 +15,8 @@ class Migration(migrations.Migration):
             fields=[
                 ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
                 ('anchor', models.CharField(max_length=64)),
-                ('book', models.ForeignKey(to='catalogue.Book')),
-                ('note', models.ForeignKey(to='dictionary.Note')),
+                ('book', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='catalogue.Book')),
+                ('note', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='dictionary.Note')),
             ],
             options={
                 'ordering': ['book'],
index c8e086f..c2891e1 100644 (file)
@@ -1,4 +1,3 @@
-# -*- coding: utf-8 -*-
 # This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
 # Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
 #
@@ -37,8 +36,8 @@ class Note(models.Model):
 
 class NoteSource(models.Model):
     """Represents a single annotation from a book."""
-    note = models.ForeignKey(Note)
-    book = models.ForeignKey(Book)
+    note = models.ForeignKey(Note, models.CASCADE)
+    book = models.ForeignKey(Book, models.CASCADE)
     anchor = models.CharField(max_length=64)
 
     class Meta:
index f802027..cd46551 100644 (file)
@@ -1,6 +1,3 @@
-# -*- coding: utf-8 -*-
-from __future__ import unicode_literals
-
 from django.db import models, migrations
 import django.db.models.deletion
 
@@ -47,7 +44,7 @@ class Migration(migrations.Migration):
                 ('cover', models.ImageField(upload_to='funding/covers', verbose_name='Cover')),
                 ('notified_near', models.DateTimeField(null=True, verbose_name='Near-end notifications sent', blank=True)),
                 ('notified_end', models.DateTimeField(null=True, verbose_name='End notifications sent', blank=True)),
-                ('book', models.ForeignKey(blank=True, to='catalogue.Book', help_text='Published book.', null=True)),
+                ('book', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, blank=True, to='catalogue.Book', help_text='Published book.', null=True)),
                 ('poll', models.ForeignKey(on_delete=django.db.models.deletion.SET_NULL, blank=True, to='polls.Poll', help_text='Poll', null=True)),
             ],
             options={
@@ -65,7 +62,7 @@ class Migration(migrations.Migration):
                 ('name', models.CharField(max_length=255, verbose_name='name')),
                 ('long_name', models.CharField(max_length=255, verbose_name='long name')),
                 ('end_date', models.DateField(null=True, verbose_name='end date', blank=True)),
-                ('offer', models.ForeignKey(verbose_name='offer', blank=True, to='funding.Offer', null=True)),
+                ('offer', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, verbose_name='offer', blank=True, to='funding.Offer', null=True)),
             ],
             options={
                 'ordering': ['-price'],
@@ -80,7 +77,7 @@ class Migration(migrations.Migration):
                 ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
                 ('amount', models.DecimalField(verbose_name='amount', max_digits=10, decimal_places=2)),
                 ('timestamp', models.DateField(verbose_name='when')),
-                ('book', models.ForeignKey(to='catalogue.Book')),
+                ('book', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='catalogue.Book')),
             ],
             options={
                 'ordering': ['-timestamp'],
@@ -92,7 +89,7 @@ class Migration(migrations.Migration):
         migrations.AddField(
             model_name='funding',
             name='offer',
-            field=models.ForeignKey(verbose_name='offer', to='funding.Offer'),
+            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, verbose_name='offer', to='funding.Offer'),
             preserve_default=True,
         ),
         migrations.AddField(
diff --git a/src/funding/migrations/0004_auto_20190729_1450.py b/src/funding/migrations/0004_auto_20190729_1450.py
new file mode 100644 (file)
index 0000000..17822ee
--- /dev/null
@@ -0,0 +1,31 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.11.20 on 2019-07-29 12:50
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('funding', '0003_auto_20180416_1336'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='funding',
+            name='offer',
+            field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='funding.Offer', verbose_name='offer'),
+        ),
+        migrations.AlterField(
+            model_name='offer',
+            name='book',
+            field=models.ForeignKey(blank=True, help_text='Published book.', null=True, on_delete=django.db.models.deletion.PROTECT, to='catalogue.Book'),
+        ),
+        migrations.AlterField(
+            model_name='spent',
+            name='book',
+            field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='catalogue.Book'),
+        ),
+    ]
index 6ca0261..2b4372f 100644 (file)
@@ -1,4 +1,3 @@
-# -*- coding: utf-8 -*-
 # This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
 # Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
 #
@@ -6,11 +5,11 @@ from datetime import date, datetime
 from urllib.parse import urlencode
 from django.conf import settings
 from django.contrib.sites.models import Site
-from django.core.urlresolvers import reverse
 from django.core.mail import send_mail
 from django.db import models
 from django.dispatch import receiver
 from django.template.loader import render_to_string
+from django.urls import reverse
 from django.utils.timezone import utc
 from django.utils.translation import ugettext_lazy as _, override
 import getpaid
@@ -31,7 +30,7 @@ class Offer(models.Model):
     start = models.DateField(_('start'), db_index=True)
     end = models.DateField(_('end'), db_index=True)
     redakcja_url = models.URLField(_('redakcja URL'), blank=True)
-    book = models.ForeignKey(Book, null=True, blank=True, help_text=_('Published book.'))
+    book = models.ForeignKey(Book, models.PROTECT, null=True, blank=True, help_text=_('Published book.'))
     cover = models.ImageField(_('Cover'), upload_to='funding/covers')
     poll = models.ForeignKey(Poll, help_text=_('Poll'), null=True, blank=True, on_delete=models.SET_NULL)
 
@@ -207,7 +206,7 @@ class Perk(models.Model):
     If no attached to a particular Offer, applies to all.
 
     """
-    offer = models.ForeignKey(Offer, verbose_name=_('offer'), null=True, blank=True)
+    offer = models.ForeignKey(Offer, models.CASCADE, verbose_name=_('offer'), null=True, blank=True)
     price = models.DecimalField(_('price'), decimal_places=2, max_digits=10)
     name = models.CharField(_('name'), max_length=255)
     long_name = models.CharField(_('long name'), max_length=255)
@@ -228,7 +227,7 @@ class Funding(models.Model):
     The payment was completed if and only if payed_at is set.
 
     """
-    offer = models.ForeignKey(Offer, verbose_name=_('offer'))
+    offer = models.ForeignKey(Offer, models.PROTECT, verbose_name=_('offer'))
     name = models.CharField(_('name'), max_length=127, blank=True)
     email = models.EmailField(_('email'), blank=True, db_index=True)
     amount = models.DecimalField(_('amount'), decimal_places=2, max_digits=10)
@@ -309,7 +308,7 @@ getpaid.register_to_payment(Funding, unique=False, related_name='payment')
 
 class Spent(models.Model):
     """ Some of the remaining money spent on a book. """
-    book = models.ForeignKey(Book)
+    book = models.ForeignKey(Book, models.PROTECT)
     amount = models.DecimalField(_('amount'), decimal_places=2, max_digits=10)
     timestamp = models.DateField(_('when'))
 
index 74530a4..d6d6570 100644 (file)
@@ -1,11 +1,10 @@
-# -*- coding: utf-8 -*-
 # This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
 # Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
 #
 from django.core.paginator import Paginator, InvalidPage
-from django.core.urlresolvers import reverse
 from django.http import Http404
 from django.shortcuts import get_object_or_404, redirect, render
+from django.urls import reverse
 from django.views.decorators.csrf import csrf_exempt
 from django.views.generic import TemplateView, FormView, ListView
 from getpaid.models import Payment
index 8999d99..0060a70 100644 (file)
@@ -1,8 +1,8 @@
-# -*- coding: utf-8 -*-
 # This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
 # Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
 #
 from django.db import models
+from django.urls import reverse
 from django.utils.translation import ugettext_lazy as _
 
 
@@ -23,6 +23,5 @@ class InfoPage(models.Model):
     def __str__(self):
         return self.title
 
-    @models.permalink
     def get_absolute_url(self):
-        return 'infopage', [self.slug]
+        return reverse('infopage', args=[self.slug])
index c4c09ad..b3c9aec 100644 (file)
@@ -1,7 +1,5 @@
-# -*- coding: utf-8 -*-
-from __future__ import unicode_literals
-
 from django.db import migrations, models
+import django.db.models.deletion
 import jsonfield.fields
 
 
@@ -38,7 +36,7 @@ class Migration(migrations.Migration):
                 ('language', models.CharField(max_length=4)),
                 ('imprint', models.CharField(max_length=256)),
                 ('publishing_date', models.DateField()),
-                ('isbn_pool', models.ForeignKey(to='isbn.ISBNPool')),
+                ('isbn_pool', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='isbn.ISBNPool')),
             ],
         ),
     ]
diff --git a/src/isbn/migrations/0005_auto_20190729_1450.py b/src/isbn/migrations/0005_auto_20190729_1450.py
new file mode 100644 (file)
index 0000000..fc43a36
--- /dev/null
@@ -0,0 +1,21 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.11.20 on 2019-07-29 12:50
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('isbn', '0004_auto_20180215_1042'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='onixrecord',
+            name='isbn_pool',
+            field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='isbn.ISBNPool'),
+        ),
+    ]
index ca8dbee..d65ca60 100644 (file)
@@ -1,4 +1,3 @@
-# -*- coding: utf-8 -*-
 # This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
 # Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
 #
@@ -53,7 +52,7 @@ class ISBNPool(models.Model):
 
 
 class ONIXRecord(models.Model):
-    isbn_pool = models.ForeignKey(ISBNPool)
+    isbn_pool = models.ForeignKey(ISBNPool, models.PROTECT)
     datestamp = models.DateField(auto_now=True)
     suffix = models.IntegerField()
     product_form = models.CharField(max_length=4)
index 8073c75..399a25d 100644 (file)
@@ -1,8 +1,7 @@
-# -*- coding: utf-8 -*-
 from django.contrib.auth.decorators import permission_required
-from django.core.urlresolvers import reverse
 from django.http.response import HttpResponseRedirect
 from django.shortcuts import render
+from django.urls import reverse
 from django.views.decorators.http import require_POST
 
 from isbn.forms import WLISBNForm, WLConfirmForm, FNPISBNForm
index 1980b26..f8741e4 100644 (file)
@@ -1,7 +1,5 @@
-# -*- coding: utf-8 -*-
-from __future__ import unicode_literals
-
 from django.db import models, migrations
+import django.db.models.deletion
 import jsonfield.fields
 from django.conf import settings
 
@@ -20,7 +18,7 @@ class Migration(migrations.Migration):
                 ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
                 ('pickle', models.FileField(upload_to='lesmianator', verbose_name='Continuations file')),
                 ('object_id', models.PositiveIntegerField()),
-                ('content_type', models.ForeignKey(to='contenttypes.ContentType')),
+                ('content_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='contenttypes.ContentType')),
             ],
             options={
             },
@@ -36,7 +34,7 @@ class Migration(migrations.Migration):
                 ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='creation date')),
                 ('seen_at', models.DateTimeField(auto_now_add=True, verbose_name='last view date')),
                 ('view_count', models.IntegerField(default=1, verbose_name='view count')),
-                ('created_by', models.ForeignKey(to=settings.AUTH_USER_MODEL, null=True)),
+                ('created_by', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, null=True)),
             ],
             options={
             },
diff --git a/src/lesmianator/migrations/0003_auto_20190729_1450.py b/src/lesmianator/migrations/0003_auto_20190729_1450.py
new file mode 100644 (file)
index 0000000..d43a9c7
--- /dev/null
@@ -0,0 +1,22 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.11.20 on 2019-07-29 12:50
+from __future__ import unicode_literals
+
+from django.conf import settings
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('lesmianator', '0002_auto_20151221_1225'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='poem',
+            name='created_by',
+            field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL),
+        ),
+    ]
index 47b4315..f12f1d7 100644 (file)
@@ -11,11 +11,11 @@ from django.core.files.base import ContentFile
 from django.db import models
 from django.utils.timezone import utc
 from django.utils.translation import ugettext_lazy as _
-from django.core.urlresolvers import reverse
 from django.contrib.auth.models import User
 from django.contrib.contenttypes.models import ContentType
 from django.contrib.contenttypes.fields import GenericForeignKey
 from django.conf import settings
+from django.urls import reverse
 
 from jsonfield import JSONField
 from catalogue.models import Book, Tag
@@ -24,7 +24,7 @@ from catalogue.models import Book, Tag
 class Poem(models.Model):
     slug = models.SlugField(_('slug'), max_length=120, db_index=True)
     text = models.TextField(_('text'))
-    created_by = models.ForeignKey(User, null=True)
+    created_by = models.ForeignKey(User, models.SET_NULL, null=True)
     created_from = JSONField(_('extra information'), null=True, blank=True)
     created_at = models.DateTimeField(_('creation date'), auto_now_add=True, editable=False)
     seen_at = models.DateTimeField(_('last view date'), auto_now_add=True, editable=False)
@@ -101,7 +101,7 @@ class Poem(models.Model):
 
 class Continuations(models.Model):
     pickle = models.FileField(_('Continuations file'), upload_to='lesmianator')
-    content_type = models.ForeignKey(ContentType)
+    content_type = models.ForeignKey(ContentType, models.CASCADE)
     object_id = models.PositiveIntegerField()
     content_object = GenericForeignKey('content_type', 'object_id')
 
index 0ad0586..3e80301 100644 (file)
@@ -1,8 +1,8 @@
-# -*- coding: utf-8 -*-\r
 # This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.\r
 # Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.\r
 #\r
 from django.db import models\r
+from django.urls import reverse\r
 from django.utils.translation import ugettext_lazy as _\r
 \r
 \r
@@ -19,9 +19,8 @@ class Catalog(models.Model):
     def __str__(self):\r
         return self.name\r
 \r
-    @models.permalink\r
     def get_absolute_url(self):\r
-        return 'libraries_catalog_view', [self.slug]\r
+        return reverse('libraries_catalog_view', args=[self.slug])\r
 \r
 \r
 class Library(models.Model):\r
@@ -40,6 +39,5 @@ class Library(models.Model):
     def __str__(self):\r
         return self.name\r
 \r
-    @models.permalink\r
     def get_absolute_url(self):\r
-        return ('libraries_library_view', [self.catalog.slug, self.slug])\r
+        return reverse('libraries_library_view', args=[self.catalog.slug, self.slug])\r
index 342fc50..7fd67b2 100644 (file)
@@ -1,8 +1,7 @@
-# -*- coding: utf-8 -*-
-from django.core.urlresolvers import reverse
 from django.http import Http404
 from django.http.response import HttpResponseRedirect
 from django.shortcuts import render, get_object_or_404
+from django.urls import reverse
 from django.utils.translation import ugettext_lazy as _
 
 from newsletter.forms import UnsubscribeForm, SubscribeForm
index f14696b..c71822f 100644 (file)
@@ -6,8 +6,8 @@ import os.path
 from urllib.parse import urljoin
 
 from django.contrib.syndication.views import Feed
-from django.core.urlresolvers import reverse
 from django.shortcuts import get_object_or_404
+from django.urls import reverse
 from django.utils.feedgenerator import Atom1Feed
 from django.conf import settings
 from django.http import Http404
index 879901a..6380c0f 100644 (file)
@@ -1,7 +1,5 @@
-# -*- coding: utf-8 -*-
-from __future__ import unicode_literals
-
 from django.db import migrations, models
+import django.db.models.deletion
 from django.conf import settings
 
 
@@ -31,11 +29,11 @@ class Migration(migrations.Migration):
         migrations.AddField(
             model_name='billingagreement',
             name='plan',
-            field=models.ForeignKey(to='paypal.BillingPlan'),
+            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='paypal.BillingPlan'),
         ),
         migrations.AddField(
             model_name='billingagreement',
             name='user',
-            field=models.ForeignKey(to=settings.AUTH_USER_MODEL),
+            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL),
         ),
     ]
diff --git a/src/paypal/migrations/0003_auto_20190729_1450.py b/src/paypal/migrations/0003_auto_20190729_1450.py
new file mode 100644 (file)
index 0000000..4c47ec7
--- /dev/null
@@ -0,0 +1,27 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.11.20 on 2019-07-29 12:50
+from __future__ import unicode_literals
+
+from django.conf import settings
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('paypal', '0002_billingagreement_token'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='billingagreement',
+            name='plan',
+            field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='paypal.BillingPlan'),
+        ),
+        migrations.AlterField(
+            model_name='billingagreement',
+            name='user',
+            field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to=settings.AUTH_USER_MODEL),
+        ),
+    ]
index 4266882..2ce3635 100644 (file)
@@ -1,4 +1,3 @@
-# -*- coding: utf-8 -*-
 # This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
 # Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
 #
@@ -14,8 +13,8 @@ class BillingPlan(models.Model):
 
 class BillingAgreement(models.Model):
     agreement_id = models.CharField(max_length=32)
-    user = models.ForeignKey(User)
-    plan = models.ForeignKey(BillingPlan)
+    user = models.ForeignKey(User, models.PROTECT)
+    plan = models.ForeignKey(BillingPlan, models.PROTECT)
     active = models.BooleanField(max_length=32)
     token = models.CharField(max_length=32)
 
index 8927cab..57c150b 100644 (file)
@@ -1,4 +1,3 @@
-# -*- coding: utf-8 -*-
 # This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
 # Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
 #
@@ -7,7 +6,7 @@ from datetime import timedelta
 import paypalrestsdk
 import pytz
 from django.contrib.sites.models import Site
-from django.core.urlresolvers import reverse
+from django.urls import reverse
 from django.utils import timezone
 from django.conf import settings
 from .models import BillingPlan, BillingAgreement
index 4454e5a..7d6181d 100644 (file)
@@ -1,10 +1,9 @@
-# -*- coding: utf-8 -*-
 # This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
 # Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
 #
 from django.conf import settings
 from django.db import models
-from django.db.models import permalink
+from django.urls import reverse
 from django.utils.translation import ugettext_lazy as _
 from datetime import datetime
 from django.db.models.signals import post_save, post_delete
@@ -34,9 +33,8 @@ class Author(models.Model):
     def __repr__(self):
         return "Author(slug=%r)" % self.slug
 
-    @permalink
     def get_absolute_url(self):
-        return 'tagged_object_list', [self.url_chunk]
+        return reverse('tagged_object_list', args=[self.url_chunk])
 
     def has_description(self):
         return len(self.description) > 0
@@ -74,9 +72,8 @@ class BookStub(models.Model):
     def __str__(self):
         return self.title
 
-    @permalink
     def get_absolute_url(self):
-        return 'book_detail', [self.slug]
+        return reverse('book_detail', args=[self.slug])
 
     def in_pd(self):
         return self.pd is not None and self.pd <= datetime.now().year
index 6280cf2..11321d4 100644 (file)
@@ -1,9 +1,7 @@
-# -*- coding: utf-8 -*-
-from __future__ import unicode_literals
-
 from os.path import join
 from django.conf import settings
 from django.db import models, migrations
+import django.db.models.deletion
 import sorl.thumbnail.fields
 import jsonfield.fields
 import django.core.files.storage
@@ -49,7 +47,7 @@ class Migration(migrations.Migration):
                 ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
                 ('area', jsonfield.fields.JSONField(default={}, verbose_name='area', editable=False)),
                 ('kind', models.CharField(db_index=True, max_length=10, verbose_name='form', choices=[('thing', 'thing'), ('theme', 'motif')])),
-                ('picture', models.ForeignKey(related_name='areas', to='picture.Picture')),
+                ('picture', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='areas', to='picture.Picture')),
             ],
             options={
             },
index 4d8dac8..c853bb9 100644 (file)
@@ -1,14 +1,13 @@
-# -*- coding: utf-8 -*-
 # This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
 # Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
 #
 from django.db import models, transaction
 import catalogue.models
-from django.db.models import permalink
 from sorl.thumbnail import ImageField
 from django.conf import settings
 from django.contrib.contenttypes.fields import GenericRelation
 from django.core.files.storage import FileSystemStorage
+from django.urls import reverse
 from slugify import slugify
 from ssify import flush_ssi_includes
 
@@ -34,7 +33,7 @@ picture_storage = FileSystemStorage(location=path.join(
 
 
 class PictureArea(models.Model):
-    picture = models.ForeignKey('picture.Picture', related_name='areas')
+    picture = models.ForeignKey('picture.Picture', models.CASCADE, related_name='areas')
     area = jsonfield.JSONField(_('area'), default={}, editable=False)
     kind = models.CharField(
         _('kind'), max_length=10, blank=False, null=False, db_index=True,
@@ -142,9 +141,8 @@ class Picture(models.Model):
     def tags_by_category(self):
         return split_tags(self.tags)
 
-    @permalink
     def get_absolute_url(self):
-        return 'picture_detail', [self.slug]
+        return reverse('picture_detail', args=[self.slug])
 
     def get_initial(self):
         try:
index 973d862..3330b61 100644 (file)
@@ -1,11 +1,10 @@
-# -*- coding: utf-8 -*-
 # This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
 # Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
 #
 import logging
 from random import randint
 from django import template
-from django.core.urlresolvers import reverse
+from django.urls import reverse
 from django.utils.cache import add_never_cache_headers
 import sorl.thumbnail.default
 from ssify import ssi_variable
index fb2c17f..79592e9 100644 (file)
@@ -1,7 +1,5 @@
-# -*- coding: utf-8 -*-
-from __future__ import unicode_literals
-
 from django.db import models, migrations
+import django.db.models.deletion
 
 
 class Migration(migrations.Migration):
@@ -30,7 +28,7 @@ class Migration(migrations.Migration):
                 ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
                 ('content', models.TextField(verbose_name='content')),
                 ('vote_count', models.IntegerField(default=0, verbose_name='vote count')),
-                ('poll', models.ForeignKey(related_name='items', to='polls.Poll')),
+                ('poll', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='items', to='polls.Poll')),
             ],
             options={
                 'verbose_name': 'vote item',
index 4b1882d..2785f35 100644 (file)
@@ -1,11 +1,10 @@
-# -*- coding: utf-8 -*-
 # This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
 # Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
 #
 from django.db import models
 from django.utils.translation import ugettext_lazy as _
 from django.core.exceptions import ValidationError
-from django.core.urlresolvers import reverse
+from django.urls import reverse
 
 
 USED_POLLS_KEY = 'used_polls'
@@ -42,7 +41,7 @@ class Poll(models.Model):
 
 class PollItem(models.Model):
 
-    poll = models.ForeignKey(Poll, related_name='items')
+    poll = models.ForeignKey(Poll, models.CASCADE, related_name='items')
     content = models.TextField(_('content'))
     vote_count = models.IntegerField(_('vote count'), default=0)
 
index ffafd2a..22d35b5 100644 (file)
@@ -1,9 +1,8 @@
-# -*- coding: utf-8 -*-
 # This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
 # Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
 #
-from django.core.urlresolvers import reverse
 from django.shortcuts import get_object_or_404, redirect, render
+from django.urls import reverse
 from django.views.decorators import cache
 from django.views.decorators.http import require_http_methods
 
index bbcf89d..9de754e 100644 (file)
@@ -1,11 +1,10 @@
-# -*- coding: utf-8 -*-
 # This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
 # Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
 #
 from django.contrib.auth.decorators import permission_required
-from django.core.urlresolvers import reverse
 from django.http.response import HttpResponseRedirect
 from django.shortcuts import render
+from django.urls import reverse
 
 from push.forms import NotificationForm
 
@@ -23,4 +22,4 @@ def notification_form(request):
 
 
 def notification_sent(request):
-    return render(request, 'push/notification_sent.html')
\ No newline at end of file
+    return render(request, 'push/notification_sent.html')
index 63e3285..d5760d1 100644 (file)
@@ -1,8 +1,7 @@
-# -*- coding: utf-8 -*-
 # This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
 # Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
 #
-from django.core.urlresolvers import reverse
+from django.urls import reverse
 from search.forms import SearchForm
 
 
index 63523cd..056918b 100644 (file)
@@ -1,7 +1,5 @@
-# -*- coding: utf-8 -*-
-from __future__ import unicode_literals
-
 from django.db import models, migrations
+import django.db.models.deletion
 
 
 class Migration(migrations.Migration):
@@ -27,7 +25,7 @@ class Migration(migrations.Migration):
                 ('image_link', models.URLField(null=True, verbose_name='link', blank=True)),
                 ('image_license', models.CharField(max_length=255, null=True, verbose_name='license name', blank=True)),
                 ('image_license_link', models.URLField(null=True, verbose_name='license link', blank=True)),
-                ('book', models.ForeignKey(verbose_name='book', blank=True, to='catalogue.Book', null=True)),
+                ('book', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, verbose_name='book', blank=True, to='catalogue.Book', null=True)),
             ],
             options={
                 'ordering': ('vip', 'text'),
index 6f1f697..c9334d8 100644 (file)
@@ -5,7 +5,7 @@ from random import randint
 from django.db import models
 from django.conf import settings
 from django.core.exceptions import ValidationError
-from django.core.urlresolvers import reverse
+from django.urls import reverse
 from django.utils.translation import ugettext_lazy as _, string_concat
 from ssify import flush_ssi_includes
 from catalogue.models import Book
@@ -36,7 +36,7 @@ class BannerGroup(models.Model):
 
 
 class Cite(models.Model):
-    book = models.ForeignKey(Book, verbose_name=_('book'), null=True, blank=True)
+    book = models.ForeignKey(Book, models.CASCADE, verbose_name=_('book'), null=True, blank=True)
     text = models.TextField(_('text'), blank=True)
     small = models.BooleanField(_('small'), default=False, help_text=_('Make this cite display smaller.'))
     vip = models.CharField(_('VIP'), max_length=128, null=True, blank=True)
index cfcaab5..72fd311 100644 (file)
@@ -1,4 +1,3 @@
-# -*- coding: utf-8 -*-
 # This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
 # Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
 #
@@ -6,8 +5,8 @@ from django import forms
 from django.contrib.sites.models import Site
 from django.core.exceptions import ValidationError
 from django.core.mail import send_mail, mail_managers
-from django.core.urlresolvers import reverse
 from django.core.validators import validate_email
+from django.urls import reverse
 from django.utils.translation import ugettext_lazy as _
 from django.utils.translation import ugettext
 
index b028897..6e43ed1 100644 (file)
@@ -1,7 +1,5 @@
-# -*- coding: utf-8 -*-
-from __future__ import unicode_literals
-
 from django.db import models, migrations
+import django.db.models.deletion
 from django.conf import settings
 
 
@@ -21,7 +19,7 @@ class Migration(migrations.Migration):
                 ('audiobooks', models.TextField(null=True, verbose_name='audiobooks', blank=True)),
                 ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='creation date')),
                 ('ip', models.GenericIPAddressField(verbose_name='IP address')),
-                ('user', models.ForeignKey(blank=True, to=settings.AUTH_USER_MODEL, null=True)),
+                ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, blank=True, to=settings.AUTH_USER_MODEL, null=True)),
             ],
             options={
                 'ordering': ('-created_at',),
@@ -38,7 +36,7 @@ class Migration(migrations.Migration):
                 ('description', models.TextField(verbose_name='Description', blank=True)),
                 ('created_at', models.DateTimeField(auto_now=True, verbose_name='creation date')),
                 ('ip', models.GenericIPAddressField(verbose_name='IP address')),
-                ('user', models.ForeignKey(blank=True, to=settings.AUTH_USER_MODEL, null=True)),
+                ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, blank=True, to=settings.AUTH_USER_MODEL, null=True)),
             ],
             options={
                 'ordering': ('-created_at',),
diff --git a/src/suggest/migrations/0003_auto_20190729_1450.py b/src/suggest/migrations/0003_auto_20190729_1450.py
new file mode 100644 (file)
index 0000000..6d0a3f4
--- /dev/null
@@ -0,0 +1,27 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.11.20 on 2019-07-29 12:50
+from __future__ import unicode_literals
+
+from django.conf import settings
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('suggest', '0002_auto_20151221_1225'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='publishingsuggestion',
+            name='user',
+            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL),
+        ),
+        migrations.AlterField(
+            model_name='suggestion',
+            name='user',
+            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL),
+        ),
+    ]
index b5fb06f..a5742d8 100644 (file)
@@ -1,4 +1,3 @@
-# -*- coding: utf-8 -*-
 # This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
 # Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
 #
@@ -15,7 +14,7 @@ class Suggestion(models.Model):
     description = models.TextField(_('description'), blank=True)
     created_at = models.DateTimeField(_('creation date'), auto_now=True)
     ip = models.GenericIPAddressField(_('IP address'))
-    user = models.ForeignKey(User, blank=True, null=True)
+    user = models.ForeignKey(User, models.SET_NULL, blank=True, null=True)
 
     class Meta:
         ordering = ('-created_at',)
@@ -32,7 +31,7 @@ class PublishingSuggestion(models.Model):
     audiobooks = models.TextField(_('audiobooks'), null=True, blank=True)
     created_at = models.DateTimeField(_('creation date'), auto_now_add=True)
     ip = models.GenericIPAddressField(_('IP address'))
-    user = models.ForeignKey(User, blank=True, null=True)
+    user = models.ForeignKey(User, models.SET_NULL, blank=True, null=True)
 
     class Meta:
         ordering = ('-created_at',)
index 706c549..060ac59 100644 (file)
@@ -1,8 +1,7 @@
-# -*- coding: utf-8 -*-
 # This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
 # Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
 #
-from django.core.urlresolvers import reverse_lazy
+from django.urls import reverse_lazy
 from django.utils.translation import ugettext_lazy as _
 
 from ajaxable.utils import AjaxableFormView
index 112e754..09516a6 100644 (file)
@@ -1,9 +1,8 @@
-# -*- coding: utf-8 -*-
 # This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
 # Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
 #
 from os.path import join, isfile
-from django.core.urlresolvers import reverse
+from django.urls import reverse
 from django.db import models
 from waiter.settings import WAITER_URL, WAITER_MAX_QUEUE
 from waiter.utils import check_abspath
index 36824d9..1271201 100644 (file)
@@ -1,7 +1,5 @@
-# -*- coding: utf-8 -*-
-from __future__ import unicode_literals
-
 from django.db import models, migrations
+import django.db.models.deletion
 import getpaid.abstract_mixin
 
 
@@ -25,7 +23,7 @@ class Migration(migrations.Migration):
                 ('amount_paid', models.DecimalField(default=0, verbose_name='amount paid', max_digits=20, decimal_places=4)),
                 ('external_id', models.CharField(max_length=64, null=True, verbose_name='external id', blank=True)),
                 ('description', models.CharField(max_length=128, null=True, verbose_name='Description', blank=True)),
-                ('order', models.ForeignKey(related_name='payment', to='funding.Funding')),
+                ('order', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='payment', to='funding.Funding')),
             ],
             options={
                 'ordering': ('-created_on',),