Many fixes for get related fields

This commit is contained in:
Antonio de la Rosa 2016-08-22 05:41:26 +02:00
parent 611ef90567
commit 617a9fb87b
4 changed files with 41 additions and 7 deletions

View file

@ -12,6 +12,8 @@ class SimpleList:
def __init__(self, model, url, t): def __init__(self, model, url, t):
self.raw_query=True
self.getpostfiles=GetPostFiles() self.getpostfiles=GetPostFiles()
self.getpostfiles.obtain_get() self.getpostfiles.obtain_get()
@ -114,6 +116,14 @@ class SimpleList:
self.s['order_field']=field_k self.s['order_field']=field_k
for field in self.fields: for field in self.fields:
#Initialize foreignkeyfield fields too
if type(self.model.fields[field]).__name__=='ForeignKeyField':
name_related=self.model.fields[field].related_model.name
for k in self.model.fields[field].related_model.fields.keys():
self.change_order[name_related+'_'+k]=self.s['order']
self.change_order[field]=self.s['order'] self.change_order[field]=self.s['order']
if self.s['order']==0: if self.s['order']==0:
@ -157,12 +167,12 @@ class SimpleList:
def show(self): def show(self):
self.model.yes_reset_conditions=False
self.obtain_order() self.obtain_order()
self.obtain_field_search() self.obtain_field_search()
self.model.yes_reset_conditions=False
self.search() self.search()
total_elements=self.model.select_count() total_elements=self.model.select_count()
@ -177,7 +187,9 @@ class SimpleList:
self.model.limit='limit '+str(begin_page)+','+str(self.limit_pages) self.model.limit='limit '+str(begin_page)+','+str(self.limit_pages)
list_items=self.model.select(self.fields, True) list_items=self.model.select(self.fields, self.raw_query)
#print(self.model.fields.keys())
pages=Pages.show( begin_page, total_elements, num_elements, link ,initial_num_pages=self.initial_num_pages, variable='begin_page', label='', func_jscript='') pages=Pages.show( begin_page, total_elements, num_elements, link ,initial_num_pages=self.initial_num_pages, variable='begin_page', label='', func_jscript='')

View file

@ -30,7 +30,7 @@
<table class="table_list"> <table class="table_list">
<tr class="title_list"> <tr class="title_list">
% for field in simplelist.fields_showed: % for field in simplelist.fields_showed:
<td class="${simplelist.model.fields[field].name}_td"><a href="${add_get_parameters(simplelist.url, order_field=simplelist.model.fields[field].name, begin_page=simplelist.begin_page, order=simplelist.change_order[field], search_text=simplelist.search_text, search_field=simplelist.search_field)}" class="${set_css_arrow(simplelist, field)}">${simplelist.model.fields[field].label}</a></td> <td class="${simplelist.model.fields[field].name}_td"><a href="${add_get_parameters(simplelist.url, order_field=field, begin_page=simplelist.begin_page, order=simplelist.change_order[field], search_text=simplelist.search_text, search_field=simplelist.search_field)}" class="${set_css_arrow(simplelist, field)}">${simplelist.model.fields[field].label}</a></td>
% endfor % endfor
% for extra_field in simplelist.arr_extra_fields: % for extra_field in simplelist.arr_extra_fields:
<td class="options_td">${ extra_field }</td> <td class="options_td">${ extra_field }</td>

View file

@ -146,6 +146,8 @@ class ForeignKeyField(IntegerField):
self.table_name=related_table.name self.table_name=related_table.name
self.related_model=related_table
self.identifier_field=identifier_field self.identifier_field=identifier_field
self.named_field=named_field self.named_field=named_field

View file

@ -126,6 +126,8 @@ class WebModel:
self.files_delete={} self.files_delete={}
self.sqlclass=sqlclass self.sqlclass=sqlclass
self.fields_to_clean=[]
# A method where create the new fields of this model # A method where create the new fields of this model
@ -183,11 +185,19 @@ class WebModel:
self.connect_to_db() self.connect_to_db()
return self.sqlclass.query(str_query, args, connection_id) return self.sqlclass.query(str_query, args, connection_id)
# Method for clean fields
def clean_fields(self):
for field in self.fields_to_clean:
del self.fields[field]
# Insert method, for insert a row in database.using a dictionary # Insert method, for insert a row in database.using a dictionary
# External agent define if the update is in code or from external source, how a form. # External agent define if the update is in code or from external source, how a form.
def insert(self, dict_values, external_agent=True): def insert(self, dict_values, external_agent=True):
self.clean_fields()
# Connect to db # Connect to db
self.post=dict_values self.post=dict_values
@ -233,6 +243,8 @@ class WebModel:
def update(self, dict_values, external_agent=True): def update(self, dict_values, external_agent=True):
self.clean_fields()
self.post=dict_values self.post=dict_values
# Connect to db # Connect to db
@ -304,7 +316,9 @@ class WebModel:
# A method for select fields from a table in db. Support for foreignkeys. # A method for select fields from a table in db. Support for foreignkeys.
#Type assoc can be assoc for return dictionaries #Type assoc can be assoc for return dictionaries
def select(self, arr_select=[], raw_query=0): def select(self, arr_select=[], raw_query=False):
self.clean_fields()
# Connect to db # Connect to db
@ -332,12 +346,12 @@ class WebModel:
fields = list(set(keys) & set(arr_select)) fields = list(set(keys) & set(arr_select))
#Creating the fields #Creating the fields
new_fields=OrderedDict()
for field in fields: for field in fields:
#Check if foreignkeyfield #Check if foreignkeyfield
if type(self.fields[field]).__name__=="ForeignKeyField" and raw_query==0: if type(self.fields[field]).__name__=="ForeignKeyField" and raw_query==False:
table_name=self.fields[field].table_name table_name=self.fields[field].table_name
@ -355,6 +369,9 @@ class WebModel:
for extra_field in self.fields[field].select_fields: for extra_field in self.fields[field].select_fields:
self.fields[table_name+'_'+extra_field]=self.fields[field].related_model.fields[extra_field]
self.fields_to_clean.append(table_name+'_'+extra_field)
# Check if extra_field is ForeignKeyField, if yes, call this function recursively. # Check if extra_field is ForeignKeyField, if yes, call this function recursively.
extra_fields.append("`"+table_name+"`.`"+extra_field+"` as `"+table_name+"_"+extra_field+"`") extra_fields.append("`"+table_name+"`.`"+extra_field+"` as `"+table_name+"_"+extra_field+"`")
@ -363,6 +380,9 @@ class WebModel:
final_fields.append("`"+self.name+"`.`"+field+"`") final_fields.append("`"+self.name+"`.`"+field+"`")
#if len(new_fields)>0:
#self.fields.update(new_fields)
extra_sql_field="" extra_sql_field=""
if len(extra_fields)>0: if len(extra_fields)>0: