Francesco Siddi 2badde4ff4 Node type editing, with FormField and FormList
This allows adding and removing custom fields from node types.
Currently does not work if the Node Type does not have any initial
custom field.
2015-02-04 01:45:11 +01:00

96 lines
2.7 KiB
Python

from application import app
from application import db
import os
import os.path as op
import datetime
import hashlib
import time
from werkzeug import secure_filename
def prefix_name(obj, file_data):
# Collect name and extension
parts = op.splitext(file_data.filename)
# Get current time (for unique hash)
timestamp = str(round(time.time()))
# Has filename only (not extension)
file_name = secure_filename(timestamp + '%s' % parts[0])
# Put them together
full_name = hashlib.md5(file_name).hexdigest() + parts[1]
return full_name
# Create directory for file fields to use
file_path = op.join(op.dirname(__file__), 'static/files',)
try:
os.mkdir(file_path)
except OSError:
pass
class NodeType(db.Model):
id = db.Column(db.Integer, primary_key = True)
name = db.Column(db.String(120), nullable=False)
description = db.Column(db.Text)
url = db.Column(db.String(120), nullable=False)
custom_fields = db.relationship('CustomFields', backref='NodeType',
cascade="all, delete, delete-orphan")
def __str__(self):
return self.name
class Node(db.Model):
id = db.Column(db.Integer, primary_key = True)
name = db.Column(db.String(120), nullable=False)
url = db.Column(db.String(120))
description = db.Column(db.Text)
main_picture = db.Column(db.String(80))
order = db.Column(db.Integer)
creation_date = db.Column(db.DateTime(), default=datetime.datetime.now)
edit_date = db.Column(db.DateTime())
parent_id = db.Column(db.Integer, db.ForeignKey('node.id'))
parent = db.relationship('Node', remote_side=[id])
node_type_id = db.Column(db.Integer(), db.ForeignKey(NodeType.id))
node_type = db.relationship(NodeType, backref='Node')
properties = db.relationship('NodeProperties', backref='Node',
cascade="all, delete, delete-orphan")
def get_property(self, name):
for p in self.properties:
if p.custom_field.name_url == name:
return p
print 'p'
return None
def __str__(self):
return self.name
class CustomFields(db.Model):
id = db.Column(db.Integer, primary_key = True)
node_type_id = db.Column(db.Integer(), db.ForeignKey(NodeType.id))
field_type = db.Column(db.String(128))
order = db.Column(db.Integer())
name = db.Column(db.String(128))
name_url = db.Column(db.String(128))
description = db.Column(db.Text())
class NodeProperties(db.Model):
id = db.Column(db.Integer, primary_key = True)
node_id = db.Column(db.Integer(), db.ForeignKey(Node.id))
custom_field_id = db.Column(db.Integer(), db.ForeignKey(CustomFields.id))
custom_field = db.relationship(CustomFields, backref='NodeProperties')
value = db.Column(db.Text())