Initial tree support using django-tree

d42/ebin
informatic 2017-02-15 04:01:47 +01:00
parent f8fdb07ad9
commit 9ac7a56135
7 changed files with 66 additions and 6 deletions

View File

@ -1,7 +1,7 @@
version: '2'
services:
db:
image: aidanlister/postgres-hstore
build: postgres-hstore
web:
build: .

View File

@ -0,0 +1,3 @@
FROM postgres:latest
MAINTAINER Piotr Dobrowolski
ADD create_extension.sh docker-entrypoint-initdb.d/create_extension.sh

View File

@ -0,0 +1,12 @@
# Because both template1 and the user postgres database have already been created,
# we need to create the hstore extension in template1 and then recreate the postgres database.
#
# Running CREATE EXTENSION in both template1 and postgres can lead to
# the extensions having different eid's.
gosu postgres psql --dbname template1 <<EOSQL
CREATE EXTENSION hstore;
CREATE EXTENSION ltree;
DROP DATABASE $POSTGRES_USER;
CREATE DATABASE $POSTGRES_USER TEMPLATE template1;
EOSQL

View File

@ -39,6 +39,7 @@ INSTALLED_APPS = [
'django.contrib.staticfiles',
'django_hstore',
'tree',
'storage',
]

View File

@ -14,11 +14,14 @@ class ItemImageInline(admin.TabularInline):
extra = 1
class ItemAdmin(admin.ModelAdmin):
list_display = ('name', 'uuid', 'props')
list_display = ('_name', 'uuid', 'props', 'path')
list_filter = ('categories',)
form = ItemForm
inlines = [ItemImageInline]
def _name(self, obj):
return '-' * obj.get_level() + '> ' + obj.name
admin.site.register(Item, ItemAdmin)
admin.site.register(Category)

View File

@ -0,0 +1,30 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.10.1 on 2017-02-15 01:15
from __future__ import unicode_literals
from django.db import migrations, models
import django.db.models.deletion
import tree.fields
from tree.operations import CreateTreeTrigger
class Migration(migrations.Migration):
dependencies = [
('storage', '0001_squashed_0008_item_state'),
('tree', '0001_initial'),
]
operations = [
migrations.AddField(
model_name='item',
name='parent',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='storage.Item'),
),
migrations.AddField(
model_name='item',
name='path',
field=tree.fields.PathField(),
),
CreateTreeTrigger('storage.Item'),
]

View File

@ -5,6 +5,10 @@ from django.contrib.auth.models import User
from django_hstore import hstore
import uuid
from tree.fields import PathField
from tree.models import TreeModelMixin
STATES = (
('present', 'Present'),
('taken', 'Taken'),
@ -21,24 +25,31 @@ class Category(models.Model):
return self.name
class Item(models.Model):
class Item(models.Model, TreeModelMixin):
uuid = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
name = models.TextField()
parent = models.ForeignKey('self', null=True, blank=True)
path = PathField()
description = models.TextField(blank=True, null=True)
state = models.CharField(max_length=31, choices=STATES, default=STATES[0][0])
categories = models.ManyToManyField(Category)
categories = models.ManyToManyField(Category, blank=True)
owner = models.ForeignKey(User, null=True, blank=True, related_name='owned_items')
taken_by = models.ForeignKey(User, null=True, blank=True, related_name='taken_items')
taken_on = models.DateTimeField(blank=True, null=True)
taken_until = models.DateTimeField(blank=True, null=True)
props = hstore.DictionaryField()
props = hstore.DictionaryField(blank=True)
objects = hstore.HStoreManager()
def __str__(self):
return self.name
return '-' * (self.get_level() or 0) + ' ' +self.name
class Meta:
ordering = ('path',)
class ItemImage(models.Model):