--- /dev/null
+# -*- coding: utf-8 -*-
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+import django.db.models.deletion
+import telemeta.models.fields
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('telemeta', '0002_auto_20170424_1110'),
+ ]
+
+ operations = [
+ migrations.AlterField(
+ model_name='mediacollection',
+ name='acquisition_mode',
+ field=telemeta.models.fields.ForeignKey(related_name='collections', on_delete=django.db.models.deletion.SET_NULL, default=None, blank=True, to='telemeta.AcquisitionMode', null=True, verbose_name='mode of acquisition'),
+ ),
+ migrations.AlterField(
+ model_name='mediacollection',
+ name='ad_conversion',
+ field=telemeta.models.fields.ForeignKey(related_name='collections', on_delete=django.db.models.deletion.SET_NULL, default=None, blank=True, to='telemeta.AdConversion', null=True, verbose_name='digitization'),
+ ),
+ migrations.AlterField(
+ model_name='mediacollection',
+ name='copy_type',
+ field=telemeta.models.fields.ForeignKey(related_name='collections', on_delete=django.db.models.deletion.SET_NULL, default=None, blank=True, to='telemeta.CopyType', null=True, verbose_name='copy type'),
+ ),
+ migrations.AlterField(
+ model_name='mediacollection',
+ name='legal_rights',
+ field=telemeta.models.fields.ForeignKey(related_name='collections', on_delete=django.db.models.deletion.SET_NULL, default=None, blank=True, to='telemeta.LegalRight', null=True, verbose_name='legal rights'),
+ ),
+ migrations.AlterField(
+ model_name='mediacollection',
+ name='media_type',
+ field=telemeta.models.fields.ForeignKey(related_name='collections', on_delete=django.db.models.deletion.SET_NULL, default=None, blank=True, to='telemeta.MediaType', null=True, verbose_name='media type'),
+ ),
+ migrations.AlterField(
+ model_name='mediacollection',
+ name='metadata_author',
+ field=telemeta.models.fields.ForeignKey(related_name='collections', on_delete=django.db.models.deletion.SET_NULL, default=None, blank=True, to='telemeta.MetadataAuthor', null=True, verbose_name='record author'),
+ ),
+ migrations.AlterField(
+ model_name='mediacollection',
+ name='metadata_writer',
+ field=telemeta.models.fields.ForeignKey(related_name='collections', on_delete=django.db.models.deletion.SET_NULL, default=None, blank=True, to='telemeta.MetadataWriter', null=True, verbose_name='record writer'),
+ ),
+ migrations.AlterField(
+ model_name='mediacollection',
+ name='original_format',
+ field=telemeta.models.fields.ForeignKey(related_name='collections', on_delete=django.db.models.deletion.SET_NULL, default=None, blank=True, to='telemeta.OriginalFormat', null=True, verbose_name='original format'),
+ ),
+ migrations.AlterField(
+ model_name='mediacollection',
+ name='physical_format',
+ field=telemeta.models.fields.ForeignKey(related_name='collections', on_delete=django.db.models.deletion.SET_NULL, default=None, blank=True, to='telemeta.PhysicalFormat', null=True, verbose_name='archive format'),
+ ),
+ migrations.AlterField(
+ model_name='mediacollection',
+ name='publisher',
+ field=telemeta.models.fields.ForeignKey(related_name='collections', on_delete=django.db.models.deletion.SET_NULL, default=None, blank=True, to='telemeta.Publisher', null=True, verbose_name='publisher'),
+ ),
+ migrations.AlterField(
+ model_name='mediacollection',
+ name='publisher_collection',
+ field=telemeta.models.fields.ForeignKey(related_name='collections', on_delete=django.db.models.deletion.SET_NULL, default=None, blank=True, to='telemeta.PublisherCollection', null=True, verbose_name='publisher collection'),
+ ),
+ migrations.AlterField(
+ model_name='mediacollection',
+ name='publishing_status',
+ field=telemeta.models.fields.ForeignKey(related_name='collections', on_delete=django.db.models.deletion.SET_NULL, default=None, blank=True, to='telemeta.PublishingStatus', null=True, verbose_name='secondary edition'),
+ ),
+ migrations.AlterField(
+ model_name='mediacollection',
+ name='recording_context',
+ field=telemeta.models.fields.ForeignKey(related_name='collections', on_delete=django.db.models.deletion.SET_NULL, default=None, blank=True, to='telemeta.RecordingContext', null=True, verbose_name='recording context'),
+ ),
+ migrations.AlterField(
+ model_name='mediacollection',
+ name='status',
+ field=telemeta.models.fields.ForeignKey(related_name='collections', on_delete=django.db.models.deletion.SET_NULL, default=None, blank=True, to='telemeta.Status', null=True, verbose_name='collection status'),
+ ),
+ migrations.AlterField(
+ model_name='mediacollectionidentifier',
+ name='type',
+ field=telemeta.models.fields.ForeignKey(on_delete=django.db.models.deletion.SET_NULL, default=None, blank=True, to='telemeta.IdentifierType', null=True, verbose_name='type'),
+ ),
+ migrations.AlterField(
+ model_name='mediaitem',
+ name='ethnic_group',
+ field=telemeta.models.fields.ForeignKey(related_name='items', on_delete=django.db.models.deletion.SET_NULL, default=None, blank=True, to='telemeta.EthnicGroup', null=True, verbose_name='population / social group'),
+ ),
+ migrations.AlterField(
+ model_name='mediaitem',
+ name='generic_style',
+ field=telemeta.models.fields.ForeignKey(related_name='items', on_delete=django.db.models.deletion.SET_NULL, default=None, blank=True, to='telemeta.GenericStyle', null=True, verbose_name='generic style'),
+ ),
+ migrations.AlterField(
+ model_name='mediaitem',
+ name='location',
+ field=telemeta.models.fields.ForeignKey(on_delete=django.db.models.deletion.SET_NULL, default=None, blank=True, to='telemeta.Location', null=True, verbose_name='location'),
+ ),
+ migrations.AlterField(
+ model_name='mediaitem',
+ name='media_type',
+ field=telemeta.models.fields.ForeignKey(related_name='items', on_delete=django.db.models.deletion.SET_NULL, default=None, blank=True, to='telemeta.MediaType', null=True, verbose_name='media type'),
+ ),
+ migrations.AlterField(
+ model_name='mediaitem',
+ name='organization',
+ field=telemeta.models.fields.ForeignKey(on_delete=django.db.models.deletion.SET_NULL, default=None, blank=True, to='telemeta.Organization', null=True, verbose_name='organization'),
+ ),
+ migrations.AlterField(
+ model_name='mediaitem',
+ name='rights',
+ field=telemeta.models.fields.ForeignKey(on_delete=django.db.models.deletion.SET_NULL, default=None, blank=True, to='telemeta.Rights', null=True, verbose_name='rights'),
+ ),
+ migrations.AlterField(
+ model_name='mediaitem',
+ name='topic',
+ field=telemeta.models.fields.ForeignKey(on_delete=django.db.models.deletion.SET_NULL, default=None, blank=True, to='telemeta.Topic', null=True, verbose_name='topic'),
+ ),
+ migrations.AlterField(
+ model_name='mediaitem',
+ name='vernacular_style',
+ field=telemeta.models.fields.ForeignKey(related_name='items', on_delete=django.db.models.deletion.SET_NULL, default=None, blank=True, to='telemeta.VernacularStyle', null=True, verbose_name='vernacular style'),
+ ),
+ migrations.AlterField(
+ model_name='mediaitemidentifier',
+ name='type',
+ field=telemeta.models.fields.ForeignKey(on_delete=django.db.models.deletion.SET_NULL, default=None, blank=True, to='telemeta.IdentifierType', null=True, verbose_name='type'),
+ ),
+ migrations.AlterField(
+ model_name='mediaitemperformance',
+ name='alias',
+ field=telemeta.models.fields.ForeignKey(related_name='performances', on_delete=django.db.models.deletion.SET_NULL, default=None, blank=True, to='telemeta.InstrumentAlias', null=True, verbose_name='vernacular name'),
+ ),
+ migrations.AlterField(
+ model_name='mediaitemperformance',
+ name='instrument',
+ field=telemeta.models.fields.ForeignKey(related_name='performances', on_delete=django.db.models.deletion.SET_NULL, default=None, blank=True, to='telemeta.Instrument', null=True, verbose_name='composition'),
+ ),
+ ]
alt_title = CharField(_('original title / translation'))
creator = CharField(_('depositor / contributor'), help_text=_('First name, Last name ; First name, Last name'))
description = TextField(_('description'))
- recording_context = WeakForeignKey('RecordingContext', related_name="collections", verbose_name=_('recording context'))
+ recording_context = ForeignKey('RecordingContext', related_name="collections", verbose_name=_('recording context'), blank=True, null=True, on_delete=models.SET_NULL)
recorded_from_year = IntegerField(_('recording year (from)'), help_text=_('YYYY'))
recorded_to_year = IntegerField(_('recording year (until)'), help_text=_('YYYY'))
year_published = IntegerField(_('year published'), help_text=_('YYYY'))
# Legal notices
collector = CharField(_('recordist'), help_text=_('First name, Last name ; First name, Last name'))
- publisher = WeakForeignKey('Publisher', related_name="collections", verbose_name=_('publisher'))
- publisher_collection = WeakForeignKey('PublisherCollection', related_name="collections", verbose_name=_('publisher collection'))
+ publisher = ForeignKey('Publisher', related_name="collections", verbose_name=_('publisher'), blank=True, null=True, on_delete=models.SET_NULL)
+ publisher_collection = ForeignKey('PublisherCollection', related_name="collections", verbose_name=_('publisher collection'), blank=True, null=True, on_delete=models.SET_NULL)
publisher_serial = CharField(_('publisher serial number'))
booklet_author = CharField(_('booklet author'), blank=True)
reference = CharField(_('publisher reference'))
external_references = TextField(_('bibliographic references'))
auto_period_access = BooleanField(_('automatic access after a rolling period'), default=True)
- legal_rights = WeakForeignKey('LegalRight', related_name="collections", verbose_name=_('legal rights'))
+ legal_rights = ForeignKey('LegalRight', related_name="collections", verbose_name=_('legal rights'), blank=True, null=True, on_delete=models.SET_NULL)
# Archiving data
code = CharField(_('code'), unique=True, required=True, validators=[is_valid_collection_code])
old_code = CharField(_('old code'), unique=False, null=True, blank=True)
- acquisition_mode = WeakForeignKey('AcquisitionMode', related_name="collections", verbose_name=_('mode of acquisition'))
+ acquisition_mode = ForeignKey('AcquisitionMode', related_name="collections", verbose_name=_('mode of acquisition'), blank=True, null=True, on_delete=models.SET_NULL)
cnrs_contributor = CharField(_('CNRS depositor'))
- copy_type = WeakForeignKey('CopyType', related_name="collections", verbose_name=_('copy type'))
- metadata_author = WeakForeignKey('MetadataAuthor', related_name="collections", verbose_name=_('record author'))
+ copy_type = ForeignKey('CopyType', related_name="collections", verbose_name=_('copy type'), blank=True, null=True, on_delete=models.SET_NULL)
+ metadata_author = ForeignKey('MetadataAuthor', related_name="collections", verbose_name=_('record author'), blank=True, null=True, on_delete=models.SET_NULL)
booklet_description = TextField(_('related documentation'))
- publishing_status = WeakForeignKey('PublishingStatus', related_name="collections", verbose_name=_('secondary edition'))
- status = WeakForeignKey('Status', related_name="collections", verbose_name=_('collection status'))
+ publishing_status = ForeignKey('PublishingStatus', related_name="collections", verbose_name=_('secondary edition'), blank=True, null=True, on_delete=models.SET_NULL)
+ status = ForeignKey('Status', related_name="collections", verbose_name=_('collection status'), blank=True, null=True, on_delete=models.SET_NULL)
alt_copies = TextField(_('copies'))
comment = TextField(_('comment'))
- metadata_writer = WeakForeignKey('MetadataWriter', related_name="collections", verbose_name=_('record writer'))
+ metadata_writer = ForeignKey('MetadataWriter', related_name="collections", verbose_name=_('record writer'), blank=True, null=True, on_delete=models.SET_NULL)
archiver_notes = TextField(_('archiver notes'))
items_done = CharField(_('items finished'))
collector_is_creator = BooleanField(_('recordist identical to depositor'))
conservation_site = CharField(_('conservation site'))
# Technical data
- media_type = WeakForeignKey('MediaType', related_name="collections", verbose_name=_('media type'))
+ media_type = ForeignKey('MediaType', related_name="collections", verbose_name=_('media type'), blank=True, null=True, on_delete=models.SET_NULL)
approx_duration = DurationField(_('estimated duration'), help_text='hh:mm:ss')
physical_items_num = IntegerField(_('number of components (medium / piece)'))
- original_format = WeakForeignKey('OriginalFormat', related_name="collections", verbose_name=_('original format'))
- physical_format = WeakForeignKey('PhysicalFormat', related_name="collections", verbose_name=_('archive format'))
- ad_conversion = WeakForeignKey('AdConversion', related_name='collections', verbose_name=_('digitization'))
+ original_format = ForeignKey('OriginalFormat', related_name="collections", verbose_name=_('original format'), blank=True, null=True, on_delete=models.SET_NULL)
+ physical_format = ForeignKey('PhysicalFormat', related_name="collections", verbose_name=_('archive format'), blank=True, null=True, on_delete=models.SET_NULL)
+ ad_conversion = ForeignKey('AdConversion', related_name='collections', verbose_name=_('digitization'), blank=True, null=True, on_delete=models.SET_NULL)
# No more used old fields
alt_ids = CharField(_('copies (obsolete field)'))
strict_code = getattr(settings, 'TELEMETA_STRICT_CODE', False)
-class EnhancedQuerySet(models.query.QuerySet):
- """QuerySet with added functionalities such as WeakForeignKey handling"""
-
- def delete(self):
- CHUNK=1024
- objects = [f for f in self.model._meta.get_fields()
- if (f.one_to_many or f.one_to_one)
- and f.auto_created and not f.concrete
- ]
- ii = self.count()
- values = self.values_list('pk')
- for related in objects:
- i = 0
- while i < ii:
- ids = [v[0] for v in values[i:i + CHUNK]]
- filter = {related.field.name + '__pk__in': ids}
- q = related.model.objects.filter(**filter)
- if isinstance(related.field, WeakForeignKey):
- update = {related.field.name: None}
- q.update(**update)
- else:
- q.delete()
-
- i += CHUNK
-
- super(EnhancedQuerySet, self).delete()
-
-
-class EnhancedManager(models.Manager):
- """Manager which is bound to EnhancedQuerySet"""
- def get_query_set(self):
- return EnhancedQuerySet(self.model)
-
-
-class EnhancedModel(models.Model):
- """Base model class with added functionality. See EnhancedQuerySet"""
-
- objects = EnhancedManager()
-
- def delete(self):
- if not self.pk:
- raise Exception("Can't delete without a primary key")
- self.__class__.objects.filter(pk=self.pk).delete()
-
- class Meta:
- abstract = True
-
-
-class ModelCore(EnhancedModel, DirtyFieldsMixin):
+class ModelCore(models.Model, DirtyFieldsMixin):
@classmethod
def required_fields(cls):
-class CoreQuerySet(EnhancedQuerySet):
+class CoreQuerySet(models.query.QuerySet):
"Base class for all query sets"
def none(self): # redundant with none() in recent Django svn
return qs
-class CoreManager(EnhancedManager):
+class CoreManager(models.Manager):
"Base class for all models managers"
def none(self, *args, **kwargs):
"""Resource identifier"""
identifier = models.CharField(_('identifier'), max_length=255, blank=True, unique=True)
- type = WeakForeignKey('IdentifierType', verbose_name=_('type'))
+ type = ForeignKey('IdentifierType', verbose_name=_('type'), blank=True, null=True, on_delete=models.SET_NULL)
date_add = models.DateTimeField(_('date added'), auto_now_add=True)
date_first = models.DateTimeField(_('date of first attribution'))
date_last = models.DateTimeField(_('date of last attribution'))
public_access = CharField(_('access type'), choices=ITEM_PUBLIC_ACCESS_CHOICES, max_length=16, default="metadata")
# Geographic and cultural informations
- location = WeakForeignKey('Location', verbose_name=_('location'))
+ location = ForeignKey('Location', verbose_name=_('location'), blank=True, null=True, on_delete=models.SET_NULL)
location_comment = CharField(_('location details'))
cultural_area = CharField(_('cultural area'))
language = CharField(_('language'))
language_iso = ForeignKey('Language', related_name="items", verbose_name=_('Language (ISO norm)'), blank=True, null=True, on_delete=models.SET_NULL)
- ethnic_group = WeakForeignKey('EthnicGroup', related_name="items", verbose_name=_('population / social group'))
+ ethnic_group = ForeignKey('EthnicGroup', related_name="items", verbose_name=_('population / social group'), blank=True, null=True, on_delete=models.SET_NULL)
context_comment = TextField(_('Ethnographic context'))
# Musical informations
moda_execut = CharField(_('implementing rules'))
- vernacular_style = WeakForeignKey('VernacularStyle', related_name="items", verbose_name=_('vernacular style'))
- generic_style = WeakForeignKey('GenericStyle', related_name="items", verbose_name=_('generic style'))
+ vernacular_style = ForeignKey('VernacularStyle', related_name="items", verbose_name=_('vernacular style'), blank=True, null=True, on_delete=models.SET_NULL)
+ generic_style = ForeignKey('GenericStyle', related_name="items", verbose_name=_('generic style'), blank=True, null=True, on_delete=models.SET_NULL)
author = CharField(_('author / compositor'), help_text=_('First name, Last name ; First name, Last name'))
# Legal mentions
- organization = WeakForeignKey('Organization', verbose_name=_('organization'))
+ organization = ForeignKey('Organization', verbose_name=_('organization'), blank=True, null=True, on_delete=models.SET_NULL)
depositor = CharField(_('depositor'))
- rights = WeakForeignKey('Rights', verbose_name=_('rights'))
+ rights = ForeignKey('Rights', verbose_name=_('rights'), blank=True, null=True, on_delete=models.SET_NULL)
# Archiving data
code = CharField(_('code'), unique=True, blank=True, required=True, help_text=_('CollectionCode_ItemCode'))
comment = TextField(_('remarks'))
# Technical data
- media_type = WeakForeignKey('MediaType', related_name="items", verbose_name=_('media type'))
+ media_type = ForeignKey('MediaType', related_name="items", verbose_name=_('media type'), blank=True, null=True, on_delete=models.SET_NULL)
approx_duration = DurationField(_('approximative duration'), blank=True, help_text=_('hh:mm:ss'))
mimetype = CharField(_('mime type'), max_length=255, blank=True)
file = FileField(_('file'), upload_to='items/%Y/%m/%d', db_column="filename", max_length=1024)
digitization_date = DateField(_('digitization date'))
publishing_date = DateField(_('publishing date'))
scientist = CharField(_('scientist'), help_text=_('First name, Last name ; First name, Last name'))
- topic = WeakForeignKey('Topic', verbose_name=_('topic'))
+ topic = ForeignKey('Topic', verbose_name=_('topic'), blank=True, null=True, on_delete=models.SET_NULL)
summary = TextField(_('summary'))
contributor = CharField(_('contributor'))
class MediaItemPerformance(ModelCore):
"Item performance"
media_item = ForeignKey('MediaItem', related_name="performances", verbose_name=_('item'))
- instrument = WeakForeignKey('Instrument', related_name="performances", verbose_name=_('composition'))
- alias = WeakForeignKey('InstrumentAlias', related_name="performances", verbose_name=_('vernacular name'))
+ instrument = ForeignKey('Instrument', related_name="performances", verbose_name=_('composition'), blank=True, null=True, on_delete=models.SET_NULL)
+ alias = ForeignKey('InstrumentAlias', related_name="performances", verbose_name=_('vernacular name'), blank=True, null=True, on_delete=models.SET_NULL)
instruments_num = CharField(_('number'))
musicians = CharField(_('interprets'))
from_record = enumeration.objects.get(id__exact=value_id)
to_record = enumeration.objects.get(id__exact=to_value_id)
links = [rel.get_accessor_name() for rel in from_record._meta.get_all_related_objects()]
- field_type = WeakForeignKey
+ field_type = ForeignKey
for link in links:
objects = getattr(from_record, link).all()