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