use existing relations

This commit is contained in:
j 2017-12-08 22:43:35 +01:00
parent 573f171f57
commit 909a0d97ee
4 changed files with 132 additions and 36 deletions

View File

@ -4,12 +4,8 @@ from __future__ import unicode_literals
from django.contrib import admin from django.contrib import admin
# Register your models here. # Register your models here.
from models import * from . import models
class ContentParentsInline(admin.TabularInline):
model = ContentContent
fk_name = 'contentid1'
''' '''
class SubdomainInline(admin.StackedInline): class SubdomainInline(admin.StackedInline):
model = Subdomain model = Subdomain
@ -21,16 +17,30 @@ class ServerAdmin(admin.ModelAdmin):
pass pass
''' '''
class ResourcesAdmin(admin.ModelAdmin):
search_fields = ['href']
list_filter = ['mime']
admin.site.register(models.Resources, ResourcesAdmin)
class ResourcesInline(admin.StackedInline):
model = models.ContentResource
extra = 2 # how many rows to show
class ContentAdmin(admin.ModelAdmin): class ContentAdmin(admin.ModelAdmin):
save_on_top = True save_on_top = True
list_display = ('__unicode__', 'datestart', 'type') list_display = ('__unicode__', 'datestart', 'type')
list_filter = ['datestart', 'type'] list_filter = ['datestart', 'type', 'view']
search_fields = ['title', 'body', 'header'] search_fields = ['title', 'body', 'header']
inlines = [ContentParentsInline] raw_id_fields = ['parent']
inlines = (ResourcesInline,)
# inlines = [SubdomainInline, DomainAliasInline] # inlines = [SubdomainInline, DomainAliasInline]
# list_display = ('url', 'server', 'manage_nameserver', 'domain_registrar', 'email', 'is_active') # list_display = ('url', 'server', 'manage_nameserver', 'domain_registrar', 'email', 'is_active')
# list_editable = ('server', 'manage_nameserver', 'domain_registrar', 'email', 'is_active') # list_editable = ('server', 'manage_nameserver', 'domain_registrar', 'email', 'is_active')
admin.site.register(Content, ContentAdmin) admin.site.register(models.Content, ContentAdmin)

View File

@ -43,10 +43,11 @@ class Comments(models.Model): #not used
name = models.CharField(max_length=150, blank=True, null=True) name = models.CharField(max_length=150, blank=True, null=True)
email = models.CharField(max_length=255, blank=True, null=True) email = models.CharField(max_length=255, blank=True, null=True)
personid = models.IntegerField(db_column='personID', blank=True, null=True) # Field name made lowercase. personid = models.IntegerField(db_column='personID', blank=True, null=True) # Field name made lowercase.
dateadded = models.DateTimeField(db_column='dateAdded') # Field name made lowercase. dateadded = models.DateTimeField(db_column='dateAdded', auto_now_add=True)
datemodified = models.DateTimeField(db_column='dateModified', blank=True, null=True) # Field name made lowercase. datemodified = models.DateTimeField(db_column='dateModified', blank=True, null=True, auto_now=True)
parentid = models.IntegerField(db_column='parentID', blank=True, null=True) # Field name made lowercase. parentid = models.IntegerField(db_column='parentID', blank=True, null=True)
contentid = models.IntegerField(db_column='contentID') # Field name made lowercase. parent = models.ForeignKey('Comments', null=True, blank=True, related_name='comments', db_index=True, db_column='parentId')
content = models.ForeignKey('Content', null=True, blank=True, related_name='comments', db_index=True, db_column='contentID')
ip = models.CharField(db_column='IP', max_length=50, blank=True, null=True) # Field name made lowercase. ip = models.CharField(db_column='IP', max_length=50, blank=True, null=True) # Field name made lowercase.
class Meta: class Meta:
@ -71,16 +72,19 @@ class Content(models.Model):
postedby = models.CharField(db_column='postedBy', max_length=50, blank=True, null=True) # Field name made lowercase. postedby = models.CharField(db_column='postedBy', max_length=50, blank=True, null=True) # Field name made lowercase.
datestart = models.DateField(db_column='dateStart', blank=True, null=True) # Field name made lowercase. datestart = models.DateField(db_column='dateStart', blank=True, null=True) # Field name made lowercase.
dateend = models.DateField(db_column='dateEnd', blank=True, null=True) # Field name made lowercase. dateend = models.DateField(db_column='dateEnd', blank=True, null=True) # Field name made lowercase.
dateadded = models.DateTimeField(db_column='dateAdded') # Field name made lowercase. dateadded = models.DateTimeField(db_column='dateAdded', auto_now_add=True)
datemodified = models.DateTimeField(db_column='dateModified', blank=True, null=True) # Field name made lowercase. datemodified = models.DateTimeField(db_column='dateModified', blank=True, null=True, auto_now=True)
published = models.IntegerField()
published = models.BooleanField()
view = models.ForeignKey("Views", null=True, blank=True, db_column="view") view = models.ForeignKey("Views", null=True, blank=True, db_column="view")
place = models.CharField(max_length=255, null=True, blank=True) place = models.CharField(max_length=255, null=True, blank=True)
parentid = models.ForeignKey("Content", null=True, db_column='parentID', blank=True, limit_choices_to={'type_id': 3}, related_name="please_run") # Field name made lowercase.
parents = models.ManyToManyField('Content', through='ContentContent', related_name= "children") parent = models.ForeignKey('Content', null=True, blank=True, related_name='children', db_index=True, db_column='parentId')
resources = models.ManyToManyField('Resources', through='ContentResource', related_name="content")
def __unicode__(self): def __unicode__(self):
return self.title return self.title or 'Untitled'
class Meta: class Meta:
managed = True managed = True
@ -92,12 +96,13 @@ class Content(models.Model):
return settings.IMAGE_PREFIX + self.image return settings.IMAGE_PREFIX + self.image
def get_absolute_url(self): def get_absolute_url(self):
if self.shortname:
return reverse('content', kwargs={'shortname': self.shortname}) return reverse('content', kwargs={'shortname': self.shortname})
'''
class ContentContent(models.Model): class ContentContent(models.Model):
contentid1 = models.ForeignKey("content", db_column='contentID1', related_name="child") # Field name made lowercase. contentid1 = models.ForeignKey('Content', db_column='contentID1', related_name='child')
contentid2 = models.ForeignKey("content", db_column='contentID2', related_name="parent") # Field name made lowercase. contentid2 = models.ForeignKey('Content', db_column='contentID2', related_name='parent')
def __unicode__(self): def __unicode__(self):
return "%s is child of %s" % (self.contentid1.title, self.contentid2.title,) return "%s is child of %s" % (self.contentid1.title, self.contentid2.title,)
@ -105,11 +110,11 @@ class ContentContent(models.Model):
class Meta: class Meta:
managed = False managed = False
db_table = 'content_content' db_table = 'content_content'
'''
class ContentKeyword(models.Model): class ContentKeyword(models.Model):
contentid = models.IntegerField(db_column='contentID') # Field name made lowercase. contentid = models.ForeignKey('Content', db_column='contentID')
keywordid = models.IntegerField(db_column='keywordID') # Field name made lowercase. resourceid = models.ForeignKey('Keywords', db_column='keywordID')
class Meta: class Meta:
managed = False managed = False
@ -117,8 +122,11 @@ class ContentKeyword(models.Model):
class ContentResource(models.Model): class ContentResource(models.Model):
contentid = models.IntegerField(db_column='contentID') # Field name made lowercase. content = models.ForeignKey('Content', db_column='contentID')
resourceid = models.IntegerField(db_column='resourceID') # Field name made lowercase. resource = models.ForeignKey('Resources', db_column='resourceID')
def __unicode__(self):
return self.resource.href
class Meta: class Meta:
managed = False managed = False
@ -157,14 +165,17 @@ class People(models.Model): #not used
bio = models.TextField(blank=True, null=True) bio = models.TextField(blank=True, null=True)
type = models.IntegerField() type = models.IntegerField()
resources = models.ManyToManyField('Resources', through='PersonResource', related_name='people')
content = models.ManyToManyField('Content', through='PersonContent', related_name='people')
class Meta: class Meta:
managed = False managed = False
db_table = 'people' db_table = 'people'
class PersonContent(models.Model): class PersonContent(models.Model):
personid = models.IntegerField(db_column='personID') # Field name made lowercase. personid = models.ForeignKey("people", db_column="personID")
contentid = models.IntegerField(db_column='contentID') # Field name made lowercase. contentid = models.ForeignKey("content", db_column="contentID")
level = models.IntegerField() level = models.IntegerField()
class Meta: class Meta:
@ -173,8 +184,8 @@ class PersonContent(models.Model):
class PersonResource(models.Model): class PersonResource(models.Model):
personid = models.IntegerField(db_column='personID') # Field name made lowercase. personid = models.ForeignKey("people", db_column="personID")
resourceid = models.IntegerField(db_column='resourceID') # Field name made lowercase. resourceid = models.ForeignKey("resources", db_column="resourceID")
class Meta: class Meta:
managed = False managed = False
@ -192,6 +203,32 @@ class Resources(models.Model):
dateadded = models.DateTimeField(db_column='dateAdded') # Field name made lowercase. dateadded = models.DateTimeField(db_column='dateAdded') # Field name made lowercase.
orderno = models.IntegerField(db_column='orderNo', blank=True, null=True) # Field name made lowercase. orderno = models.IntegerField(db_column='orderNo', blank=True, null=True) # Field name made lowercase.
def __unicode__(self):
return self.href
def get_absolute_url(self):
href = self.href
if not href.startswith('http') and not href.startswith('/'):
href = '/' + href
if href.startswith('/'):
href = 'https://studio.camp' + href
return href
@property
def is_image(self):
if self.mime:
return self.mime.lower() in ('gif', 'jpeg', 'jpg', 'png')
@property
def is_audio(self):
if self.mime:
return self.mime.lower() in ('mp3', 'ogg')
@property
def is_video(self):
if self.mime:
return self.mime.lower() in ('ogv', 'mp4')
class Meta: class Meta:
managed = False managed = False
db_table = 'resources' db_table = 'resources'

View File

@ -81,6 +81,8 @@ body, h1, h2, h3, h4, h5, h6 {
box-shadow: none !important; box-shadow: none !important;
} }
.admin-menu {
position: absolute;
top: 45px;
right: 25px;
}

View File

@ -1,8 +1,11 @@
{% extends 'base.html' %} {% extends 'base.html' %}
{% block content %} {% block content %}
{% if request.user.is_staff %}
<div class="admin-menu">
<a href="{% url 'admin:content_content_change' content.id %}">Edit</a>
</div>
{% endif %}
<img src="{{ content.image_url }}" width="75%"> <img src="{{ content.image_url }}" width="75%">
<div class="content_detail"> <div class="content_detail">
@ -10,5 +13,49 @@
<h4>{{ content.header|safe }} </h4> <h4>{{ content.header|safe }} </h4>
<p>{{ content.body|safe }}</p> <p>{{ content.body|safe }}</p>
{% if content.children.exists %}
<b>Child Nodes:</b> <br>
<ul>
{% for node in content.children.all %}
{% if node.shortname %}
<li>
<a href="{{node.get_absolute_url}}">{{ node.title }}</a>
</li>
{% endif %}
{% endfor %}
</ul>
{% endif %}
{% if content.parent and content.parent.title %}
<b>Part of:</b><br>
<a href="{{content.parent.get_absolute_url}}">{{content.parent.title}}</a>
{% endif %}
{% if content.resources.exists %}
<style>
.resources img {
max-width: 128px;
float: left;
}
</style>
<div class="resources">
<b>Resources:</b> <br>
{% for res in content.resources.all %}
<div>
{% if res.is_image %}
<img src="{{res.get_absolute_url}}">
{% elif res.is_audio %}
<audio controls src="{{res.get_absolute_url}}"></audio>
{% elif res.is_video %}
<video controls src="{{res.get_absolute_url}}"></video>
{% else %}
<a href="{{res.get_absolute_url}}">{{res.description|default:res.href}}</a>
{% endif %}
</div>
{% endfor %}
<br clear="all">
</div>
{% endif %}
</div> </div>
{% endblock %} {% endblock %}