Many fixes for get related fields
This commit is contained in:
parent
611ef90567
commit
617a9fb87b
4 changed files with 41 additions and 7 deletions
|
|
@ -12,6 +12,8 @@ class SimpleList:
|
|||
|
||||
def __init__(self, model, url, t):
|
||||
|
||||
self.raw_query=True
|
||||
|
||||
self.getpostfiles=GetPostFiles()
|
||||
|
||||
self.getpostfiles.obtain_get()
|
||||
|
|
@ -114,6 +116,14 @@ class SimpleList:
|
|||
self.s['order_field']=field_k
|
||||
|
||||
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']
|
||||
|
||||
if self.s['order']==0:
|
||||
|
|
@ -157,12 +167,12 @@ class SimpleList:
|
|||
|
||||
def show(self):
|
||||
|
||||
self.model.yes_reset_conditions=False
|
||||
|
||||
self.obtain_order()
|
||||
|
||||
self.obtain_field_search()
|
||||
|
||||
self.model.yes_reset_conditions=False
|
||||
|
||||
self.search()
|
||||
|
||||
total_elements=self.model.select_count()
|
||||
|
|
@ -177,7 +187,9 @@ class SimpleList:
|
|||
|
||||
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='')
|
||||
|
||||
|
|
|
|||
|
|
@ -30,7 +30,7 @@
|
|||
<table class="table_list">
|
||||
<tr class="title_list">
|
||||
% 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
|
||||
% for extra_field in simplelist.arr_extra_fields:
|
||||
<td class="options_td">${ extra_field }</td>
|
||||
|
|
|
|||
|
|
@ -146,6 +146,8 @@ class ForeignKeyField(IntegerField):
|
|||
|
||||
self.table_name=related_table.name
|
||||
|
||||
self.related_model=related_table
|
||||
|
||||
self.identifier_field=identifier_field
|
||||
|
||||
self.named_field=named_field
|
||||
|
|
|
|||
|
|
@ -127,6 +127,8 @@ class WebModel:
|
|||
|
||||
self.sqlclass=sqlclass
|
||||
|
||||
self.fields_to_clean=[]
|
||||
|
||||
# A method where create the new fields of this model
|
||||
|
||||
def create_fields(self):
|
||||
|
|
@ -183,11 +185,19 @@ class WebModel:
|
|||
self.connect_to_db()
|
||||
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
|
||||
# External agent define if the update is in code or from external source, how a form.
|
||||
|
||||
def insert(self, dict_values, external_agent=True):
|
||||
|
||||
self.clean_fields()
|
||||
|
||||
# Connect to db
|
||||
|
||||
self.post=dict_values
|
||||
|
|
@ -233,6 +243,8 @@ class WebModel:
|
|||
|
||||
def update(self, dict_values, external_agent=True):
|
||||
|
||||
self.clean_fields()
|
||||
|
||||
self.post=dict_values
|
||||
|
||||
# Connect to db
|
||||
|
|
@ -304,7 +316,9 @@ class WebModel:
|
|||
# A method for select fields from a table in db. Support for foreignkeys.
|
||||
#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
|
||||
|
||||
|
|
@ -332,12 +346,12 @@ class WebModel:
|
|||
fields = list(set(keys) & set(arr_select))
|
||||
|
||||
#Creating the fields
|
||||
|
||||
new_fields=OrderedDict()
|
||||
for field in fields:
|
||||
|
||||
#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
|
||||
|
||||
|
|
@ -355,6 +369,9 @@ class WebModel:
|
|||
|
||||
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.
|
||||
|
||||
extra_fields.append("`"+table_name+"`.`"+extra_field+"` as `"+table_name+"_"+extra_field+"`")
|
||||
|
|
@ -363,6 +380,9 @@ class WebModel:
|
|||
|
||||
final_fields.append("`"+self.name+"`.`"+field+"`")
|
||||
|
||||
#if len(new_fields)>0:
|
||||
#self.fields.update(new_fields)
|
||||
|
||||
extra_sql_field=""
|
||||
|
||||
if len(extra_fields)>0:
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue