Compare commits

..

3 Commits

Author SHA1 Message Date
j
504d31802e related content 2018-08-22 21:59:40 +02:00
j
2227b04e2c migrations 2018-08-22 20:57:28 +02:00
j
9bbe577d2f remove debug 2018-08-22 20:57:03 +02:00
7 changed files with 122 additions and 3 deletions

View File

@ -45,7 +45,6 @@ class MaxLengthAdminMarkdownxWidget(AdminMarkdownxWidget):
if not attrs: if not attrs:
attrs = {} attrs = {}
attrs['maxlength'] = 250 attrs['maxlength'] = 250
print(dir(self))
return super(MaxLengthAdminMarkdownxWidget, self).get_context(name, value, attrs) return super(MaxLengthAdminMarkdownxWidget, self).get_context(name, value, attrs)
class Media: class Media:
@ -70,7 +69,7 @@ class ContentAdmin(admin.ModelAdmin):
list_filter = ['datestart', 'type'] list_filter = ['datestart', 'type']
search_fields = ['title', 'body', 'header', 'shortname'] search_fields = ['title', 'body', 'header', 'shortname']
raw_id_fields = ['photo'] raw_id_fields = ['photo']
inlines = [ContentParentsInline, FileInline, LinkInline] inlines = [FileInline, LinkInline]
formfield_overrides = { formfield_overrides = {
models.TextField: {'widget': MaxLengthAdminMarkdownxWidget}, models.TextField: {'widget': MaxLengthAdminMarkdownxWidget},
} }

View File

@ -0,0 +1,33 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.8 on 2018-08-22 18:32
from __future__ import unicode_literals
import django.core.validators
from django.db import migrations, models
import django.db.models.deletion
import markdownx.models
class Migration(migrations.Migration):
dependencies = [
('content', '0010_auto_20180222_1319'),
]
operations = [
migrations.AlterField(
model_name='content',
name='photo',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='main_photo', to='photologue.Photo'),
),
migrations.AlterField(
model_name='content',
name='schedule',
field=markdownx.models.MarkdownxField(blank=True, default='', null=True),
),
migrations.AlterField(
model_name='content',
name='teaser',
field=models.TextField(blank=True, null=True, validators=[django.core.validators.MaxLengthValidator(250)]),
),
]

View File

@ -0,0 +1,21 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.8 on 2018-08-22 19:08
from __future__ import unicode_literals
from django.db import migrations
import sortedm2m.fields
class Migration(migrations.Migration):
dependencies = [
('content', '0011_auto_20180822_1832'),
]
operations = [
migrations.AddField(
model_name='content',
name='related_content',
field=sortedm2m.fields.SortedManyToManyField(help_text=None, to='content.Content'),
),
]

View File

@ -0,0 +1,23 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.8 on 2018-08-22 19:08
from __future__ import unicode_literals
from django.db import migrations
def migrate_relations(apps, schema_editor):
Content = apps.get_model("content", "Content")
for c in Content.objects.all():
for r in c.parents.all():
c.related_content.add(r)
class Migration(migrations.Migration):
dependencies = [
('content', '0012_content_related_content'),
]
operations = [
migrations.RunPython(migrate_relations),
]

View File

@ -0,0 +1,23 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.8 on 2018-08-22 19:08
from __future__ import unicode_literals
from django.db import migrations
def migrate_shortname(apps, schema_editor):
Content = apps.get_model("content", "Content")
for c in Content.objects.filter(shortname__contains=' '):
c.shortname = c.shortname.replace(' ', '_')
c.save()
class Migration(migrations.Migration):
dependencies = [
('content', '0013_related'),
]
operations = [
migrations.RunPython(migrate_shortname),
]

View File

@ -6,10 +6,14 @@ from django.core.validators import MaxLengthValidator
from django.db import models from django.db import models
from django.utils.html import mark_safe from django.utils.html import mark_safe
from django.utils.encoding import python_2_unicode_compatible from django.utils.encoding import python_2_unicode_compatible
from django.db.models.signals import m2m_changed
from django.dispatch import receiver
from photologue.models import Photo, Gallery from photologue.models import Photo, Gallery
from markdownx.models import MarkdownxField from markdownx.models import MarkdownxField
from markdownx.utils import markdownify from markdownx.utils import markdownify
from sortedm2m.fields import SortedManyToManyField
import ox import ox
# Create your models here. # Create your models here.
@ -90,6 +94,8 @@ class Content(models.Model):
place = models.CharField(max_length=255, null=True, blank=True) place = models.CharField(max_length=255, null=True, blank=True)
parents = models.ManyToManyField('Content', through='ContentContent', related_name="children") parents = models.ManyToManyField('Content', through='ContentContent', related_name="children")
related_content = SortedManyToManyField('Content', related_name='reverse_related_content')
resources = models.ManyToManyField('Resources', through='ContentResource', related_name="content") resources = models.ManyToManyField('Resources', through='ContentResource', related_name="content")
gallery = models.ForeignKey(Gallery, null=True, blank=True, related_name="content") gallery = models.ForeignKey(Gallery, null=True, blank=True, related_name="content")
@ -170,6 +176,20 @@ class Content(models.Model):
managed = True managed = True
db_table = 'content' db_table = 'content'
def reverse(self):
ids = set(self.related_content.all().values_list('id', flat=True))
for r in self.reverse_related_content.exclude(id__in=ids):
self.reverse_related_content.remove(r)
reverse_ids = set(self.reverse_related_content.all().values_list('id', flat=True))
for r in self.related_content.filter(id__in=ids - reverse_ids):
self.reverse_related_content.add(r)
@receiver(m2m_changed, sender='content.Content_related_content')
def post_save_reverse(sender, **kwargs):
if kwargs.get('action') == 'post_add':
c = kwargs['instance']
c.reverse()
print(c.id, set(c.related_content.all().values_list('id', flat=True)) == set(c.reverse_related_content.all().values_list('id', flat=True)))
@python_2_unicode_compatible @python_2_unicode_compatible
class ContentContent(models.Model): class ContentContent(models.Model):

View File

@ -1,5 +1,5 @@
<div class="large-4 medium-4 columns"> <div class="large-4 medium-4 columns">
{% include "related.html" with related=content.children.all %} {% include "related.html" with related=content.related_content.all %}
{% if latest_content_list %} {% if latest_content_list %}
<h4 class="sidebar-h4">{{section}}</h4> <h4 class="sidebar-h4">{{section}}</h4>
<div class="row"> <div class="row">