remotes/origin/hasaccess
parent
43582f40a4
commit
670a1f485e
10 changed files with 224 additions and 0 deletions
@ -0,0 +1,43 @@ |
||||
from django.contrib import admin |
||||
from polymorphic.admin import ( |
||||
PolymorphicParentModelAdmin, |
||||
PolymorphicChildModelAdmin, |
||||
PolymorphicChildModelFilter, |
||||
) |
||||
|
||||
from .models import Content, Image, ImageText, Text, Video |
||||
|
||||
|
||||
class ContentChildAdmin(PolymorphicChildModelAdmin): |
||||
base_model = Content |
||||
|
||||
|
||||
@admin.register(Image) |
||||
class ImageAdmin(ContentChildAdmin): |
||||
base_model = Image |
||||
|
||||
|
||||
@admin.register(Text) |
||||
class TextAdmin(ContentChildAdmin): |
||||
base_model = Text |
||||
|
||||
|
||||
@admin.register(ImageText) |
||||
class ImageTextAdmin(ContentChildAdmin): |
||||
base_model = ImageText |
||||
|
||||
|
||||
@admin.register(Video) |
||||
class VideoAdmin(ContentChildAdmin): |
||||
base_model = Video |
||||
|
||||
|
||||
@admin.register(Content) |
||||
class ContentAdmin(PolymorphicParentModelAdmin): |
||||
base_model = Content |
||||
child_models = ( |
||||
Image, |
||||
Text, |
||||
ImageText, |
||||
Video |
||||
) |
||||
@ -0,0 +1,6 @@ |
||||
from django.apps import AppConfig |
||||
|
||||
|
||||
class ContentConfig(AppConfig): |
||||
name = 'content' |
||||
verbose_name = 'Контент' |
||||
@ -0,0 +1,93 @@ |
||||
# Generated by Django 2.0.2 on 2018-02-05 12:05 |
||||
|
||||
from django.db import migrations, models |
||||
import django.db.models.deletion |
||||
|
||||
|
||||
class Migration(migrations.Migration): |
||||
|
||||
initial = True |
||||
|
||||
dependencies = [ |
||||
('course', '0020_auto_20180202_1716'), |
||||
('contenttypes', '0002_remove_content_type_name'), |
||||
] |
||||
|
||||
operations = [ |
||||
migrations.CreateModel( |
||||
name='Content', |
||||
fields=[ |
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), |
||||
('title', models.CharField(default='', max_length=100, verbose_name='Заголовок')), |
||||
('position', models.PositiveSmallIntegerField(default=1, unique=True, verbose_name='Положение на странице')), |
||||
], |
||||
options={ |
||||
'abstract': False, |
||||
'base_manager_name': 'objects', |
||||
}, |
||||
), |
||||
migrations.CreateModel( |
||||
name='Image', |
||||
fields=[ |
||||
('content_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='content.Content')), |
||||
('img', models.ImageField(upload_to='content/images', verbose_name='Изображение')), |
||||
], |
||||
options={ |
||||
'abstract': False, |
||||
'base_manager_name': 'objects', |
||||
}, |
||||
bases=('content.content',), |
||||
), |
||||
migrations.CreateModel( |
||||
name='ImageText', |
||||
fields=[ |
||||
('content_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='content.Content')), |
||||
('img', models.ImageField(upload_to='content/images', verbose_name='Изображение')), |
||||
('txt', models.TextField(default='', verbose_name='Текст')), |
||||
], |
||||
options={ |
||||
'abstract': False, |
||||
'base_manager_name': 'objects', |
||||
}, |
||||
bases=('content.content',), |
||||
), |
||||
migrations.CreateModel( |
||||
name='Text', |
||||
fields=[ |
||||
('content_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='content.Content')), |
||||
('txt', models.TextField(default='', verbose_name='Текст')), |
||||
], |
||||
options={ |
||||
'abstract': False, |
||||
'base_manager_name': 'objects', |
||||
}, |
||||
bases=('content.content',), |
||||
), |
||||
migrations.CreateModel( |
||||
name='Video', |
||||
fields=[ |
||||
('content_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='content.Content')), |
||||
('url', models.URLField(verbose_name='Ссылка')), |
||||
], |
||||
options={ |
||||
'abstract': False, |
||||
'base_manager_name': 'objects', |
||||
}, |
||||
bases=('content.content',), |
||||
), |
||||
migrations.AddField( |
||||
model_name='content', |
||||
name='course', |
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='course.Course', verbose_name='Курс'), |
||||
), |
||||
migrations.AddField( |
||||
model_name='content', |
||||
name='lesson', |
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='course.Lesson', verbose_name='Урок'), |
||||
), |
||||
migrations.AddField( |
||||
model_name='content', |
||||
name='polymorphic_ctype', |
||||
field=models.ForeignKey(editable=False, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='polymorphic_content.content_set+', to='contenttypes.ContentType'), |
||||
), |
||||
] |
||||
@ -0,0 +1,29 @@ |
||||
# Generated by Django 2.0.2 on 2018-02-05 12:12 |
||||
|
||||
from django.db import migrations, models |
||||
import django.utils.timezone |
||||
|
||||
|
||||
class Migration(migrations.Migration): |
||||
|
||||
dependencies = [ |
||||
('content', '0001_initial'), |
||||
] |
||||
|
||||
operations = [ |
||||
migrations.AlterModelOptions( |
||||
name='content', |
||||
options={'verbose_name': 'Контент', 'verbose_name_plural': 'Контент'}, |
||||
), |
||||
migrations.AddField( |
||||
model_name='content', |
||||
name='created_at', |
||||
field=models.DateTimeField(auto_now_add=True, default=django.utils.timezone.now), |
||||
preserve_default=False, |
||||
), |
||||
migrations.AddField( |
||||
model_name='content', |
||||
name='update_at', |
||||
field=models.DateTimeField(auto_now=True), |
||||
), |
||||
] |
||||
@ -0,0 +1,47 @@ |
||||
from django.db import models |
||||
|
||||
from polymorphic.models import PolymorphicModel |
||||
|
||||
from apps.course.models import Course, Lesson |
||||
|
||||
|
||||
class Content(PolymorphicModel): |
||||
course = models.ForeignKey( |
||||
Course, on_delete=models.CASCADE, |
||||
null=True, blank=True, |
||||
verbose_name='Курс' |
||||
) |
||||
lesson = models.ForeignKey( |
||||
Lesson, on_delete=models.CASCADE, |
||||
null=True, blank=True, |
||||
verbose_name='Урок' |
||||
) |
||||
title = models.CharField('Заголовок', max_length=100, default='') |
||||
position = models.PositiveSmallIntegerField( |
||||
'Положение на странице', |
||||
default=1, unique=True |
||||
) |
||||
|
||||
created_at = models.DateTimeField(auto_now_add=True) |
||||
update_at = models.DateTimeField(auto_now=True) |
||||
|
||||
class Meta: |
||||
verbose_name = 'Контент' |
||||
verbose_name_plural = 'Контент' |
||||
|
||||
|
||||
class Image(Content): |
||||
img = models.ImageField('Изображение', upload_to='content/images') |
||||
|
||||
|
||||
class Text(Content): |
||||
txt = models.TextField('Текст', default='') |
||||
|
||||
|
||||
class ImageText(Content): |
||||
img = models.ImageField('Изображение', upload_to='content/images') |
||||
txt = models.TextField('Текст', default='') |
||||
|
||||
|
||||
class Video(Content): |
||||
url = models.URLField('Ссылка') |
||||
@ -0,0 +1,3 @@ |
||||
from django.test import TestCase |
||||
|
||||
# Create your tests here. |
||||
@ -0,0 +1,2 @@ |
||||
from django.shortcuts import render |
||||
|
||||
Loading…
Reference in new issue