Commit c6bd30f0 by Clinton Blackburn

Updated Subject model

ECOM-5189
parent c9ea3ef5
......@@ -74,6 +74,14 @@ class OrganizationAdmin(admin.ModelAdmin):
list_filter = ('partner',)
@admin.register(Subject)
class SubjectAdmin(admin.ModelAdmin):
list_display = ('uuid', 'name', 'slug',)
list_filter = ('partner',)
readonly_fields = ('uuid',)
search_fields = ('uuid', 'name', 'slug',)
class KeyNameAdmin(admin.ModelAdmin):
list_display = ('key', 'name',)
ordering = ('key', 'name',)
......@@ -91,7 +99,7 @@ for model in (Person,):
admin.site.register(model, KeyNameAdmin)
# Register children of AbstractNamedModel
for model in (LevelType, Subject, Prerequisite, Expertise, MajorWork):
for model in (LevelType, Prerequisite, Expertise, MajorWork):
admin.site.register(model, NamedModelAdmin)
# Register remaining models using basic ModelAdmin classes
......
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
import uuid
import django_extensions.db.fields
from django.conf import settings
from django.core.exceptions import ImproperlyConfigured
from django.db import migrations, models
def update_subjects(apps, schema_editor):
Subject = apps.get_model('course_metadata', 'Subject')
subjects = Subject.objects.filter(partner__isnull=True)
if subjects.count() > 0:
# We perform this check here to avoid issues with migrations for empty databases
# (e.g. when running unit tests) that don't yet have a defined Partner.
if not settings.DEFAULT_PARTNER_ID:
raise ImproperlyConfigured('DEFAULT_PARTNER_ID must be defined!')
Partner = apps.get_model('core', 'Partner')
partner = Partner.objects.get(id=settings.DEFAULT_PARTNER_ID)
# We iterate over all subjects, instead of calling .update(), to trigger slug generation
for subject in subjects:
subject.partner = partner
subject.uuid = uuid.uuid4()
subject.save()
class Migration(migrations.Migration):
dependencies = [
('core', '0010_auto_20160731_0023'),
('course_metadata', '0012_create_seat_types'),
]
operations = [
migrations.AddField(
model_name='subject',
name='uuid',
field=models.UUIDField(verbose_name='UUID', editable=False, default=uuid.uuid4),
),
migrations.AddField(
model_name='subject',
name='banner_image_url',
field=models.URLField(blank=True, null=True),
),
migrations.AddField(
model_name='subject',
name='card_image_url',
field=models.URLField(blank=True, null=True),
),
migrations.AddField(
model_name='subject',
name='description',
field=models.TextField(blank=True, null=True),
),
migrations.AddField(
model_name='subject',
name='partner',
field=models.ForeignKey(to='core.Partner', null=True),
),
migrations.AddField(
model_name='subject',
name='slug',
field=django_extensions.db.fields.AutoSlugField(overwrite=True, editable=False, blank=True,
populate_from='name'),
),
migrations.AddField(
model_name='subject',
name='subtitle',
field=models.CharField(blank=True, max_length=255, null=True),
),
migrations.AlterField(
model_name='subject',
name='name',
field=models.CharField(max_length=255),
),
migrations.AlterUniqueTogether(
name='subject',
unique_together=set([('partner', 'name'), ('partner', 'slug'), ('partner', 'uuid')]),
),
migrations.RunPython(update_subjects, lambda *args: None),
migrations.AlterField(
model_name='subject',
name='slug',
field=django_extensions.db.fields.AutoSlugField(populate_from='name', editable=False,
help_text='Leave this field blank to have the value generated automatically.',
blank=True),
),
migrations.AlterField(
model_name='subject',
name='partner',
field=models.ForeignKey(to='core.Partner'),
),
]
......@@ -97,9 +97,27 @@ class LevelType(AbstractNamedModel):
pass
class Subject(AbstractNamedModel):
class Subject(TimeStampedModel):
""" Subject model. """
pass
uuid = models.UUIDField(blank=False, null=False, default=uuid4, editable=False, verbose_name=_('UUID'))
name = models.CharField(max_length=255, blank=False, null=False)
subtitle = models.CharField(max_length=255, blank=True, null=True)
description = models.TextField(blank=True, null=True)
banner_image_url = models.URLField(blank=True, null=True)
card_image_url = models.URLField(blank=True, null=True)
slug = AutoSlugField(populate_from='name', editable=True, blank=True,
help_text=_('Leave this field blank to have the value generated automatically.'))
partner = models.ForeignKey(Partner)
def __str__(self):
return self.name
class Meta:
unique_together = (
('partner', 'name'),
('partner', 'slug'),
('partner', 'uuid'),
)
class Prerequisite(AbstractNamedModel):
......
......@@ -43,10 +43,16 @@ class VideoFactory(AbstractMediaModelFactory):
model = Video
class SubjectFactory(AbstractNamedModelFactory):
class SubjectFactory(factory.DjangoModelFactory):
class Meta:
model = Subject
name = FuzzyText()
description = FuzzyText()
banner_image_url = FuzzyURL()
card_image_url = FuzzyURL()
partner = factory.SubFactory(PartnerFactory)
class LevelTypeFactory(AbstractNamedModelFactory):
class Meta:
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment