Initial tree support using django-tree
This commit is contained in:
parent
f8fdb07ad9
commit
9ac7a56135
|
@ -1,7 +1,7 @@
|
|||
version: '2'
|
||||
services:
|
||||
db:
|
||||
image: aidanlister/postgres-hstore
|
||||
build: postgres-hstore
|
||||
|
||||
web:
|
||||
build: .
|
||||
|
|
|
@ -0,0 +1,3 @@
|
|||
FROM postgres:latest
|
||||
MAINTAINER Piotr Dobrowolski
|
||||
ADD create_extension.sh docker-entrypoint-initdb.d/create_extension.sh
|
|
@ -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
|
||||
|
|
@ -39,6 +39,7 @@ INSTALLED_APPS = [
|
|||
'django.contrib.staticfiles',
|
||||
|
||||
'django_hstore',
|
||||
'tree',
|
||||
|
||||
'storage',
|
||||
]
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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'),
|
||||
]
|
|
@ -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):
|
||||
|
|
Loading…
Reference in New Issue