From: Frédéric Perrin Date: Thu, 1 Dec 2016 09:11:50 +0000 (+0000) Subject: Try new multilinks approach X-Git-Url: http://gitweb.fperrin.net/?p=djsite.git;a=commitdiff_plain;h=refs%2Fheads%2Fmultilinks Try new multilinks approach --- diff --git a/djsite/settings_common.py b/djsite/settings_common.py index 1bc166c..6474c2b 100644 --- a/djsite/settings_common.py +++ b/djsite/settings_common.py @@ -36,8 +36,10 @@ INSTALLED_APPS = ( 'ajax_select', 'jquery', # 'jquery_ui', + 'formtools', 'tinymce', 'quotes', + 'quotes_beta', ) MIDDLEWARE_CLASSES = ( diff --git a/djsite/urls.py b/djsite/urls.py index 4821694..6aa2b59 100644 --- a/djsite/urls.py +++ b/djsite/urls.py @@ -19,13 +19,14 @@ from django.views.generic.base import RedirectView import quotes.views -admin.autodiscover() +# admin.autodiscover() urlpatterns = [ url(r'^cntrl/', include(admin.site.urls)), url(r'^tinymce/', include('tinymce.urls')), url(r'^ajax_select/', include('ajax_select.urls')), url(r'^quotes/', include('quotes.urls', namespace='quotes')), + url(r'^quotes-beta/', include('quotes_beta.urls', namespace='quotes_beta')), url(r'^$', RedirectView.as_view(url='/quotes/', permanent=True)), ] diff --git a/quotes_beta/__init__.py b/quotes_beta/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/quotes_beta/addquote.py b/quotes_beta/addquote.py new file mode 100644 index 0000000..e69de29 diff --git a/quotes_beta/admin.py b/quotes_beta/admin.py new file mode 100644 index 0000000..94b1951 --- /dev/null +++ b/quotes_beta/admin.py @@ -0,0 +1,12 @@ +from django.contrib import admin + +# Register your models here. +from .models import * + +admin.site.register(Tag) +admin.site.register(Context) +admin.site.register(Person) +admin.site.register(Book) +admin.site.register(Film) +admin.site.register(Quote) +admin.site.register(Link) diff --git a/quotes_beta/adminviews.py b/quotes_beta/adminviews.py new file mode 100644 index 0000000..a162d85 --- /dev/null +++ b/quotes_beta/adminviews.py @@ -0,0 +1,2 @@ +def add(request): + pass diff --git a/quotes_beta/forms.py b/quotes_beta/forms.py new file mode 100644 index 0000000..7a4f372 --- /dev/null +++ b/quotes_beta/forms.py @@ -0,0 +1,6 @@ +from django import forms + +class QuoteForm(forms.Form): + text = form.TextField() + + parent = form.CharField() diff --git a/quotes_beta/migrations/0001_initial.py b/quotes_beta/migrations/0001_initial.py new file mode 100644 index 0000000..4c61360 --- /dev/null +++ b/quotes_beta/migrations/0001_initial.py @@ -0,0 +1,94 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.10.3 on 2016-11-19 13:55 +from __future__ import unicode_literals + +from django.db import migrations, models +import django.db.models.deletion +import quotes.localmodels + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='Context', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('creation_date', models.DateTimeField(auto_now_add=True)), + ('last_modification', models.DateTimeField(auto_now=True)), + ('name', models.CharField(max_length=100, unique=True)), + ('date', models.DateField(blank=True, help_text=b'Date of the quote', null=True)), + ('notes', quotes.localmodels.HTMLField(blank=True, help_text=b'Notes about the entry; may be left blank. Displayed on the public pages')), + ('pvt_notes', quotes.localmodels.HTMLField(blank=True, help_text=b'Notes about the entry; not displayed on the public interface')), + ('nb_display', models.BigIntegerField(default=0)), + ], + options={ + 'ordering': ['name'], + }, + ), + migrations.CreateModel( + name='Link', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('relation_type', models.CharField(max_length=100)), + ], + ), + migrations.CreateModel( + name='Tag', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('tag', models.CharField(max_length=100, unique=True)), + ], + ), + migrations.CreateModel( + name='Book', + fields=[ + ('context_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='quotes_beta.Context')), + ], + bases=('quotes_beta.context',), + ), + migrations.CreateModel( + name='Film', + fields=[ + ('context_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='quotes_beta.Context')), + ], + bases=('quotes_beta.context',), + ), + migrations.CreateModel( + name='Person', + fields=[ + ('context_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='quotes_beta.Context')), + ('birth_date', models.DateField(blank=True, help_text=b'Date of birth', null=True)), + ('death_date', models.DateField(blank=True, help_text=b'Date of death (leave blank if still alive!)', null=True)), + ], + bases=('quotes_beta.context',), + ), + migrations.CreateModel( + name='Quote', + fields=[ + ('context_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='quotes_beta.Context')), + ('text', quotes.localmodels.HTMLField()), + ], + bases=('quotes_beta.context',), + ), + migrations.AddField( + model_name='link', + name='child', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='parents', to='quotes_beta.Context'), + ), + migrations.AddField( + model_name='link', + name='parent', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='childs', to='quotes_beta.Context'), + ), + migrations.AddField( + model_name='context', + name='tags', + field=models.ManyToManyField(blank=True, help_text=b'Not implemented yet', to='quotes_beta.Tag'), + ), + ] diff --git a/quotes_beta/migrations/__init__.py b/quotes_beta/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/quotes_beta/models.py b/quotes_beta/models.py new file mode 100644 index 0000000..ba05a28 --- /dev/null +++ b/quotes_beta/models.py @@ -0,0 +1,89 @@ +from django.db import models +from django.urls import reverse + +from quotes.localmodels import HTMLField + +# Create your models here. +class Tag(models.Model): + tag = models.CharField(max_length=100, unique=True) + + def __unicode__(self): + return self.tag + + def get_absolute_url(self): + return reverse('quotes_beta:tags', args=[str(self.id)]) + +class Context(models.Model): + creation_date = models.DateTimeField(auto_now_add=True) + last_modification = models.DateTimeField(auto_now=True) + + name = models.CharField(max_length=100, + unique=True) + + date = models.DateField(blank=True, null=True, + help_text="Date of the quote") + + notes = HTMLField(blank=True, help_text= \ + "Notes about the entry; may be left blank. Displayed \ + on the public pages") + pvt_notes = HTMLField(blank=True, help_text= \ + "Notes about the entry; not displayed on \ + the public interface") + + tags = models.ManyToManyField(Tag, blank=True, + help_text='Not implemented yet') + + nb_display = models.BigIntegerField(default=0) + def incr_display(self): + self.nb_display = models.F('nb_display') + 1 + self.save() + + def add_parent(self, parent): + descendants = self.childs + self + ascendants = parent + parent.parents + for descendant in descendants: + for ascendant in ascendants: + Link.objects.create(child=descendant, parent=ascendant) + + def __unicode__(self): + return self.name + + class Meta: + ordering = ['name'] + +class Person(Context): + birth_date = models.DateField(blank=True, null=True, + help_text="Date of birth") + death_date = models.DateField(blank=True, null=True, + help_text="Date of death (leave blank \ + if still alive!)") + + def get_absolute_url(self): + return reverse('quotes_beta:person', args=[str(self.id)]) + +class Book(Context): + def get_absolute_url(self): + return reverse('quotes_beta:work', args=[str(self.id)]) + +class Film(Context): + def get_absolute_url(self): + return reverse('quotes_beta:work', args=[str(self.id)]) + +class Quote(Context): + text = HTMLField() + + def __unicode__(self): + return self.work.author.name + ": " + self.text + + def get_absolute_url(self): + return reverse('quotes_beta:onequote', args=[str(self.id)]) + + # class Meta(Context.Meta): + # ordering = ['-pk'] + +class Link(models.Model): + child = models.ForeignKey(Context, related_name='parents') + parent = models.ForeignKey(Context, related_name='childs') + relation_type = models.CharField(max_length=100) + + diff --git a/quotes_beta/urls.py b/quotes_beta/urls.py new file mode 100644 index 0000000..e56d083 --- /dev/null +++ b/quotes_beta/urls.py @@ -0,0 +1,14 @@ +from django.conf.urls import url +from django.contrib.auth.views import login + +from . import views, adminviews + +urlpatterns = [ + url(r'^$', views.index, name='index'), + +# url(r'^admin/$', adminviews.listadmintools, name='listadmintools'), + url(r'^admin/login$', login, {'template_name': 'admin/login.html'}), + url(r'^admin/add/$', adminviews.add, name='add'), + +# url(r'^all/$', views.all, name="all"), +] diff --git a/quotes_beta/views.py b/quotes_beta/views.py new file mode 100644 index 0000000..3c9edf7 --- /dev/null +++ b/quotes_beta/views.py @@ -0,0 +1,2 @@ +def index(request): + pass