Edit record procedure fixing has began
This commit is contained in:
parent
8ca81184a9
commit
77da13fbaa
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
.idea/
|
||||||
|
__pycache__/
|
|
@ -6,7 +6,7 @@
|
||||||
"fieldList": [
|
"fieldList": [
|
||||||
{
|
{
|
||||||
"fName": "id",
|
"fName": "id",
|
||||||
"fDescription": "Номер п.п.",
|
"fDescription": "UID",
|
||||||
"fType": "INTEGER",
|
"fType": "INTEGER",
|
||||||
"index": "PRIMARY KEY",
|
"index": "PRIMARY KEY",
|
||||||
"autoIncrement": "yes",
|
"autoIncrement": "yes",
|
||||||
|
@ -60,7 +60,7 @@
|
||||||
"fieldList": [
|
"fieldList": [
|
||||||
{
|
{
|
||||||
"fName": "id",
|
"fName": "id",
|
||||||
"fDescription": "Номер п.п.",
|
"fDescription": "UID",
|
||||||
"fType": "INTEGER",
|
"fType": "INTEGER",
|
||||||
"index": "PRIMARY KEY",
|
"index": "PRIMARY KEY",
|
||||||
"autoIncrement": "yes",
|
"autoIncrement": "yes",
|
||||||
|
@ -106,7 +106,7 @@
|
||||||
"fieldList": [
|
"fieldList": [
|
||||||
{
|
{
|
||||||
"fName": "id",
|
"fName": "id",
|
||||||
"fDescription": "Номер п.п.",
|
"fDescription": "UID",
|
||||||
"fType": "INTEGER",
|
"fType": "INTEGER",
|
||||||
"index": "PRIMARY KEY",
|
"index": "PRIMARY KEY",
|
||||||
"autoIncrement": "yes",
|
"autoIncrement": "yes",
|
||||||
|
@ -122,7 +122,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"fName": "city",
|
"fName": "city",
|
||||||
"fDescription": "Населеннй пункт",
|
"fDescription": "Населенный пункт",
|
||||||
"fType": "varchar(200)",
|
"fType": "varchar(200)",
|
||||||
"index": "no",
|
"index": "no",
|
||||||
"autoIncrement": "no",
|
"autoIncrement": "no",
|
||||||
|
@ -147,54 +147,116 @@
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"tableName": "test",
|
"tableName": "items",
|
||||||
"tableDescription": "Шляпа",
|
"tableDescription": "Оборудование",
|
||||||
"fieldList": [
|
"fieldList": [
|
||||||
{
|
{
|
||||||
"fName": "id",
|
"fName": "id",
|
||||||
"fDescription": "Номер п.п.",
|
"fDescription": "UID",
|
||||||
"fType": "INTEGER",
|
"fType": "INTEGER",
|
||||||
"index": "PRIMARY KEY",
|
"index": "PRIMARY KEY",
|
||||||
"autoIncrement": "yes",
|
"autoIncrement": "yes",
|
||||||
"relation": []
|
"relation": []
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"fName": "user",
|
"fName": "item_name",
|
||||||
"fDescription": "Юзер шляпы",
|
"fDescription": "Наименование",
|
||||||
|
"fType": "VARCHAR(100)",
|
||||||
|
"index": "no",
|
||||||
|
"autoIncrement": "no",
|
||||||
|
"relation": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"fName": "item_address",
|
||||||
|
"fDescription": "Место расположения",
|
||||||
"fType": "INTEGER",
|
"fType": "INTEGER",
|
||||||
"index": "no",
|
"index": "no",
|
||||||
"autoIncrement": "no",
|
"autoIncrement": "no",
|
||||||
"relation": ["users.id", "last_name, name, middle_name"]
|
"relation": ["address.id", "city, street, house"]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"fName": "item_type",
|
||||||
|
"fDescription": "Тип",
|
||||||
|
"fType": "CHAR(20)",
|
||||||
|
"index": "no",
|
||||||
|
"autoIncrement": "no",
|
||||||
|
"relation": ["itemtype.id", "type_name"]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"fName": "inventory_number",
|
||||||
|
"fDescription": "Инвентарный номер",
|
||||||
|
"fType": "CHAR(10)",
|
||||||
|
"index": "no",
|
||||||
|
"autoIncrement": "no",
|
||||||
|
"relation": []
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"tableName": "test2",
|
"tableName": "itemtype",
|
||||||
"tableDescription": "Шляпа2",
|
"tableDescription": "Тип оборудования",
|
||||||
"fieldList": [
|
"fieldList": [
|
||||||
{
|
{
|
||||||
"fName": "id",
|
"fName": "id",
|
||||||
"fDescription": "Номер п.п.",
|
"fDescription": "UID",
|
||||||
"fType": "INTEGER",
|
"fType": "INTEGER",
|
||||||
"index": "PRIMARY KEY",
|
"index": "PRIMARY KEY",
|
||||||
"autoIncrement": "yes",
|
"autoIncrement": "yes",
|
||||||
"relation": []
|
"relation": []
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"fName": "ins_date",
|
"fName": "type_name",
|
||||||
"fDescription": "Дата добавления",
|
"fDescription": "Тип",
|
||||||
|
"fType": "VARCHAR(100)",
|
||||||
|
"index": "no",
|
||||||
|
"autoIncrement": "no",
|
||||||
|
"relation": []
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tableName": "itemrelocation",
|
||||||
|
"tableDescription": "Перемещения",
|
||||||
|
"fieldList": [
|
||||||
|
{
|
||||||
|
"fName": "id",
|
||||||
|
"fDescription": "UID",
|
||||||
|
"fType": "INTEGER",
|
||||||
|
"index": "PRIMARY KEY",
|
||||||
|
"autoIncrement": "yes",
|
||||||
|
"relation": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"fName": "item_id",
|
||||||
|
"fDescription": "Оборудование",
|
||||||
|
"fType": "INTEGER",
|
||||||
|
"index": "no",
|
||||||
|
"autoIncrement": "no",
|
||||||
|
"relation": ["items.id", "item_name, inventory_number"]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"fName": "source_place",
|
||||||
|
"fDescription": "Откуда",
|
||||||
|
"fType": "INTEGER",
|
||||||
|
"index": "no",
|
||||||
|
"autoIncrement": "no",
|
||||||
|
"relation": ["address.id", "city, street, house"]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"fName": "destination_place",
|
||||||
|
"fDescription": "Куда",
|
||||||
|
"fType": "INTEGER",
|
||||||
|
"index": "no",
|
||||||
|
"autoIncrement": "no",
|
||||||
|
"relation": ["address.id", "city, street, house"]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"fName": "create_datetime",
|
||||||
|
"fDescription": "Дата перемещения",
|
||||||
"fType": "DATETIME",
|
"fType": "DATETIME",
|
||||||
"index": "no",
|
"index": "no",
|
||||||
"autoIncrement": "no",
|
"autoIncrement": "no",
|
||||||
"relation": []
|
"relation": []
|
||||||
},
|
|
||||||
{
|
|
||||||
"fName": "user",
|
|
||||||
"fDescription": "Юзер шляпы",
|
|
||||||
"fType": "INTEGER",
|
|
||||||
"index": "no",
|
|
||||||
"autoIncrement": "no",
|
|
||||||
"relation": ["users.id", "last_name, name, middle_name"]
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
12
dm.py
12
dm.py
|
@ -3,8 +3,8 @@ import json, os, configparser, shutil, re
|
||||||
from datetime import datetime, date, time
|
from datetime import datetime, date, time
|
||||||
|
|
||||||
def firstInit():
|
def firstInit():
|
||||||
# Инициализация переменныхб создание конфигруационного файла, копирование шаблонов
|
# Инициализация переменных создание конфигруационного файла, копирование шаблонов
|
||||||
global db_type, db_hostname, db_user, db_password, db_name, template_file, db_type
|
global db_type, db_hostname, db_user, db_password, db_name, template_file, db_type, template_dir
|
||||||
config = configparser.RawConfigParser()
|
config = configparser.RawConfigParser()
|
||||||
# проверяем тип ОС
|
# проверяем тип ОС
|
||||||
if os.name == "nt":
|
if os.name == "nt":
|
||||||
|
@ -39,6 +39,7 @@ def firstInit():
|
||||||
config.read(cfg_file)
|
config.read(cfg_file)
|
||||||
|
|
||||||
work_dir = config.get('Directory', 'work_dir')
|
work_dir = config.get('Directory', 'work_dir')
|
||||||
|
global template_dir
|
||||||
template_dir = config.get('Directory', 'template_dir')
|
template_dir = config.get('Directory', 'template_dir')
|
||||||
db_type = config.get('DataBase', 'db_type')
|
db_type = config.get('DataBase', 'db_type')
|
||||||
db_hostname = config.get('DataBase', 'db_hostname')
|
db_hostname = config.get('DataBase', 'db_hostname')
|
||||||
|
@ -177,9 +178,9 @@ def initDBstructure():
|
||||||
global dbTablesDescriptionList, template_file, tblNamesList
|
global dbTablesDescriptionList, template_file, tblNamesList
|
||||||
table_list = open(template_file, "r", encoding="utf-8")
|
table_list = open(template_file, "r", encoding="utf-8")
|
||||||
data = json.load(table_list, encoding="utf-8")
|
data = json.load(table_list, encoding="utf-8")
|
||||||
tbl_list = data["tables"]
|
#tbl_list = data["tables"]
|
||||||
tblNamesList = createTables(tbl_list)
|
#tblNamesList = createTables(tbl_list)
|
||||||
|
tblNamesList = createTables(data["tables"])
|
||||||
return tblNamesList
|
return tblNamesList
|
||||||
|
|
||||||
# выборка данных из заданной таблицы
|
# выборка данных из заданной таблицы
|
||||||
|
@ -188,6 +189,7 @@ def selectData(tbl):
|
||||||
# если юольше 1 поля добавить CONCAT
|
# если юольше 1 поля добавить CONCAT
|
||||||
qwery = "SELECT "
|
qwery = "SELECT "
|
||||||
subqwery = ""
|
subqwery = ""
|
||||||
|
#print(dbTablesStructList)
|
||||||
for item in dbTablesStructList:
|
for item in dbTablesStructList:
|
||||||
if item[0] == tbl:
|
if item[0] == tbl:
|
||||||
for field in item[1]:
|
for field in item[1]:
|
||||||
|
|
56
gui.py
56
gui.py
|
@ -5,6 +5,8 @@ import sys
|
||||||
from PyQt5.QtCore import *
|
from PyQt5.QtCore import *
|
||||||
from PyQt5.QtGui import *
|
from PyQt5.QtGui import *
|
||||||
from PyQt5.QtWidgets import *
|
from PyQt5.QtWidgets import *
|
||||||
|
#from PyQt5.QtWidgets import (QMainWindow, QTextEdit, QAction, QFileDialog, QApplication)
|
||||||
|
#from PyQt5.QtGui import QIcon
|
||||||
|
|
||||||
#import pymysql
|
#import pymysql
|
||||||
import dm
|
import dm
|
||||||
|
@ -83,13 +85,17 @@ class MyTable(QTableWidget):
|
||||||
#print(self.dbTableName, row, self.statusTip())
|
#print(self.dbTableName, row, self.statusTip())
|
||||||
i = 0
|
i = 0
|
||||||
#print(self.columnCount())
|
#print(self.columnCount())
|
||||||
|
#print(self.verticalHeaderItem(row).text(), '---')
|
||||||
while i < self.columnCount():
|
while i < self.columnCount():
|
||||||
if self.item(row, i):
|
if self.item(row, i):
|
||||||
valueList.append(self.item(row, i).text())
|
val = self.item(row, i).text()
|
||||||
|
print(val)
|
||||||
|
valueList.append(str(val))
|
||||||
else:
|
else:
|
||||||
valueList.append('')
|
valueList.append('')
|
||||||
#print(self.item(row, i).text())
|
|
||||||
i += 1
|
i += 1
|
||||||
|
print(valueList)
|
||||||
editRecord(self, row, self.dbTableName, valueList)
|
editRecord(self, row, self.dbTableName, valueList)
|
||||||
|
|
||||||
# Диалог выбора связанных данных
|
# Диалог выбора связанных данных
|
||||||
|
@ -274,15 +280,15 @@ class EditForm(QMainWindow):
|
||||||
hboxEdit.addWidget(lbl2)
|
hboxEdit.addWidget(lbl2)
|
||||||
hboxEdit.addWidget(edit)
|
hboxEdit.addWidget(edit)
|
||||||
# добавляем к полю кнопку для вызова связанных
|
# добавляем к полю кнопку для вызова связанных
|
||||||
print(fName)
|
#print(fName)
|
||||||
listRelationTableAndField = dm.getRelationsForField(tblName, fName)
|
listRelationTableAndField = dm.getRelationsForField(tblName, fName)
|
||||||
|
|
||||||
print(listRelationTableAndField)
|
#print(listRelationTableAndField)
|
||||||
if listRelationTableAndField != 'q':
|
if listRelationTableAndField != 'q':
|
||||||
tableRelation = listRelationTableAndField[0]
|
tableRelation = listRelationTableAndField[0]
|
||||||
fieldRelation = listRelationTableAndField[1]
|
fieldRelation = listRelationTableAndField[1]
|
||||||
replaceField = listRelationTableAndField[2]
|
replaceField = listRelationTableAndField[2]
|
||||||
print(tableRelation + '-' + fieldRelation +'-'+replaceField)
|
#print(tableRelation + '-' + fieldRelation +'-'+replaceField)
|
||||||
btnRelations = QPushButton('...')
|
btnRelations = QPushButton('...')
|
||||||
btnRelations.setFixedWidth(30)
|
btnRelations.setFixedWidth(30)
|
||||||
# добавляем название виджета в список соответсвия кнопок и таблиц БД
|
# добавляем название виджета в список соответсвия кнопок и таблиц БД
|
||||||
|
@ -386,6 +392,7 @@ def addDataIntoTable(dbTableName, tblDataWidget, data='NULL'):
|
||||||
dbFieldRelationValueList = []
|
dbFieldRelationValueList = []
|
||||||
for key in data:
|
for key in data:
|
||||||
n = 0
|
n = 0
|
||||||
|
print(key)
|
||||||
for item in key:
|
for item in key:
|
||||||
listRelationTableAndField = dm.getRelationsForField(dbTableName, fieldNames[n][0])
|
listRelationTableAndField = dm.getRelationsForField(dbTableName, fieldNames[n][0])
|
||||||
if listRelationTableAndField != 'q':
|
if listRelationTableAndField != 'q':
|
||||||
|
@ -397,15 +404,26 @@ def addDataIntoTable(dbTableName, tblDataWidget, data='NULL'):
|
||||||
else:
|
else:
|
||||||
newitem = QTableWidgetItem(str(item))
|
newitem = QTableWidgetItem(str(item))
|
||||||
dbFieldRelationValueList.append([newitem, m, n, 'None', 'None'])
|
dbFieldRelationValueList.append([newitem, m, n, 'None', 'None'])
|
||||||
|
|
||||||
else:
|
else:
|
||||||
|
# преобразуем все типы в строку
|
||||||
newitem = QTableWidgetItem(str(item))
|
newitem = QTableWidgetItem(str(item))
|
||||||
# преобразуем все типы в строку
|
#print(fieldNames[n][0])
|
||||||
|
#print(str(item))
|
||||||
|
# проверяем название поля и если это id то данные вносим в заголовок строки
|
||||||
|
# таким образом внесем уникальный ID в чётко определенное поле
|
||||||
|
#if fieldNames[n][0] == "id":
|
||||||
|
# tblDataWidget.setVerticalHeaderItem(m, QTableWidgetItem(str(item)))
|
||||||
tblDataWidget.setItem(m, n, newitem)
|
tblDataWidget.setItem(m, n, newitem)
|
||||||
n += 1
|
n += 1
|
||||||
m += 1
|
m += 1
|
||||||
|
|
||||||
# Показ меню и панели инструментов
|
# Показ меню и панели инструментов
|
||||||
def showMenuToolbar(window):
|
def showMenuToolbar(window):
|
||||||
|
openFileAction = QAction(QIcon('img/open.gif'), 'Открыть', window)
|
||||||
|
openFileAction.setShortcut('Ctrl+O')
|
||||||
|
openFileAction.setStatusTip('Открыть')
|
||||||
|
openFileAction.triggered.connect(openTemplate)
|
||||||
|
|
||||||
newAction = QAction(QIcon('img/new.gif'), 'Добавить', window)
|
newAction = QAction(QIcon('img/new.gif'), 'Добавить', window)
|
||||||
newAction.setShortcut('Ins')
|
newAction.setShortcut('Ins')
|
||||||
newAction.setStatusTip('Добавить')
|
newAction.setStatusTip('Добавить')
|
||||||
|
@ -414,12 +432,11 @@ def showMenuToolbar(window):
|
||||||
deleteAction = QAction(QIcon('img/delete.gif'), 'Удалить', window)
|
deleteAction = QAction(QIcon('img/delete.gif'), 'Удалить', window)
|
||||||
deleteAction.setShortcut('Del')
|
deleteAction.setShortcut('Del')
|
||||||
deleteAction.setStatusTip('Удалить')
|
deleteAction.setStatusTip('Удалить')
|
||||||
# deleteAction.triggered.connect(window.qqqq)
|
|
||||||
|
|
||||||
exitAction = QAction(QIcon('img/exit.gif'), 'Выход', window)
|
exitAction = QAction(QIcon('img/exit.gif'), 'Выход', window)
|
||||||
exitAction.setShortcut('Ctrl+Q')
|
exitAction.setShortcut('Ctrl+Q')
|
||||||
exitAction.setStatusTip('Выход')
|
exitAction.setStatusTip('Выйти')
|
||||||
exitAction.triggered.connect(window.close)
|
exitAction.triggered.connect(exit)
|
||||||
|
|
||||||
structureAction = QAction(QIcon('img/table.gif'), 'Показать структуру', window)
|
structureAction = QAction(QIcon('img/table.gif'), 'Показать структуру', window)
|
||||||
#structureAction.setShortcut('Ctrl+Q')
|
#structureAction.setShortcut('Ctrl+Q')
|
||||||
|
@ -429,32 +446,28 @@ def showMenuToolbar(window):
|
||||||
cutAction = QAction(QIcon('img/cut.gif'), 'Вырезать', window)
|
cutAction = QAction(QIcon('img/cut.gif'), 'Вырезать', window)
|
||||||
cutAction.setShortcut('Ctrl+X')
|
cutAction.setShortcut('Ctrl+X')
|
||||||
cutAction.setStatusTip('Вырезать')
|
cutAction.setStatusTip('Вырезать')
|
||||||
# cutAction.triggered.connect(window.close)
|
|
||||||
|
|
||||||
copyAction = QAction(QIcon('img/copy.gif'), 'Копировать', window)
|
copyAction = QAction(QIcon('img/copy.gif'), 'Копировать', window)
|
||||||
copyAction.setShortcut('Ctrl+С')
|
copyAction.setShortcut('Ctrl+С')
|
||||||
copyAction.setStatusTip('Копировать')
|
copyAction.setStatusTip('Копировать')
|
||||||
# copyAction.triggered.connect(window.close)
|
|
||||||
|
|
||||||
pasteAction = QAction(QIcon('img/paste.gif'), 'Вставить', window)
|
pasteAction = QAction(QIcon('img/paste.gif'), 'Вставить', window)
|
||||||
pasteAction.setShortcut('Ctrl+V')
|
pasteAction.setShortcut('Ctrl+V')
|
||||||
pasteAction.setStatusTip('Вставить')
|
pasteAction.setStatusTip('Вставить')
|
||||||
# pasteAction.triggered.connect(window.close)
|
|
||||||
|
|
||||||
findAction = QAction(QIcon('img/find.gif'), 'Поиск', window)
|
findAction = QAction(QIcon('img/find.gif'), 'Поиск', window)
|
||||||
findAction.setShortcut('Ctrl+F')
|
findAction.setShortcut('Ctrl+F')
|
||||||
findAction.setStatusTip('Искать')
|
findAction.setStatusTip('Искать')
|
||||||
# findAction.triggered.connect(window.close)
|
|
||||||
|
|
||||||
printAction = QAction(QIcon('img/print.gif'), 'Печатать', window)
|
printAction = QAction(QIcon('img/print.gif'), 'Печатать', window)
|
||||||
printAction.setShortcut('Ctrl+P')
|
printAction.setShortcut('Ctrl+P')
|
||||||
printAction.setStatusTip('Печатать')
|
printAction.setStatusTip('Печатать')
|
||||||
# printAction.triggered.connect(window.close)
|
|
||||||
|
|
||||||
window.statusBar()
|
window.statusBar()
|
||||||
|
|
||||||
menubar = window.menuBar()
|
menubar = window.menuBar()
|
||||||
fileMenu = menubar.addMenu('&Файл')
|
fileMenu = menubar.addMenu('&Файл')
|
||||||
|
fileMenu.addAction(openFileAction)
|
||||||
fileMenu.addAction(newAction)
|
fileMenu.addAction(newAction)
|
||||||
fileMenu.addAction(deleteAction)
|
fileMenu.addAction(deleteAction)
|
||||||
fileMenu.addAction(printAction)
|
fileMenu.addAction(printAction)
|
||||||
|
@ -472,6 +485,7 @@ def showMenuToolbar(window):
|
||||||
# toolbar = window.addToolBar('Редактирование')
|
# toolbar = window.addToolBar('Редактирование')
|
||||||
|
|
||||||
toolbar = window.addToolBar('Панель инструментов')
|
toolbar = window.addToolBar('Панель инструментов')
|
||||||
|
#toolbar.addAction(openFileAction)
|
||||||
toolbar.addAction(newAction)
|
toolbar.addAction(newAction)
|
||||||
toolbar.addAction(deleteAction)
|
toolbar.addAction(deleteAction)
|
||||||
toolbar.addAction(copyAction)
|
toolbar.addAction(copyAction)
|
||||||
|
@ -556,11 +570,12 @@ def editRecord(tableWidget, row, dbTableName, valueList):
|
||||||
valueList.pop(i)
|
valueList.pop(i)
|
||||||
valueList.insert(i, item[3])
|
valueList.insert(i, item[3])
|
||||||
val = item[3]
|
val = item[3]
|
||||||
|
#print(val)
|
||||||
editForm.widgetsList[i][1].setText(val)
|
editForm.widgetsList[i][1].setText(val)
|
||||||
i += 1
|
i += 1
|
||||||
print(valueList)
|
#print(valueList)
|
||||||
|
|
||||||
print(editForm.widgetsList)
|
#print(editForm.widgetsList)
|
||||||
#dm.deleteRecordsFromDB(dbTableName, valueList)
|
#dm.deleteRecordsFromDB(dbTableName, valueList)
|
||||||
|
|
||||||
|
|
||||||
|
@ -576,6 +591,12 @@ def showStructure():
|
||||||
print(dm.getFields(tblName))
|
print(dm.getFields(tblName))
|
||||||
print(dm.getTableStructureFromDB(tblName))
|
print(dm.getTableStructureFromDB(tblName))
|
||||||
|
|
||||||
|
def openTemplate():
|
||||||
|
global template_file, template_dir
|
||||||
|
template_file = QFileDialog.getOpenFileName(None, 'Open file', template_dir)[0]
|
||||||
|
dm.initDBstructure(template_file)
|
||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
global dbTablesList, listDBTables, tabRelationsData, dbFieldRelationValueList
|
global dbTablesList, listDBTables, tabRelationsData, dbFieldRelationValueList
|
||||||
dbFieldRelationValueList = []
|
dbFieldRelationValueList = []
|
||||||
|
@ -620,3 +641,4 @@ def main():
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
main()
|
main()
|
||||||
|
print(template_dir)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user