我编写了一个函数,该函数返回Django中一个类的插入字符串,该类在FileMaker中建模和映射表。
@staticmethod
def get_insert_string():
fields = []
arguments = []
for field in Owner._meta.fields:
if field.primary_key:
pass
elif field.help_text:
fields.append('"%s"' % field.help_text)
arguments.append('?')
result = 'insert into %s ( %s ) values ( %s )' % ( Owner.filemaker_table_name, u','.join(fields), u','.join(arguments))
return result
示例输出。
Owner.get_insert_string()
u'插入所有者(“ uuid”,“ ABN_number”,“ Address_1”,“ Creation_Date”,“ Creation_Time”,“ Creation_User”,“ Creation_timestamp”,“ Date_started”,“ Modification_timestamp”,“ State”,“郊区”,“帐户代码”,“帐户名称”,“帐户编号”,“授权的官员姓名”,“授权的官员签名”,“授权的姓氏”,“银行名称”,“ bsb”,“公司名称”,“ company_use_as_address”,“ crn_number”,“ discount_percent” ,“ driver_or_staff”,“传真”,“ is_driver”,“ is_staff”,“ jp_name”,“ jp_number”,“ jp_signature”,“座机”,“移动电话”,“ oa_number”,“ owner_1_first_name”,“ owner_1_middle_name”,“ owner_1_surname”,“ owner_2_first_name”,“ owner_2_middle_name”,“ owner_2_surname”,“ owner_3_first_name”,“ owner_3_middle_name”,“ owner_3_surname”,“ paid_always”,“ parts_at_cost”,“邮政编码”,“ share”,“需购买” “,“应纳税”,“应纳税出口”,“三十天帐户”,“ trade_retail_for_parts_cost”,“ tsl_number”,“ tsl_owner”,“ updated_date”)值(?,?,?,?,?,?,?,?,?,?, ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?, ? ,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,? )'
该如何更改,以便可以传入类的名称并获得相同的结果,以便该函数可用于模块中的所有类?
类似
def get_insert_string(class_name):
fields = []
arguments = []
for field in class_name._meta.fields:
if field.primary_key:
pass
if field.help_text:
fields.append('"%s"' % field.help_text)
arguments.append('?')
result = 'insert into %s ( %s ) values ( %s )' % ( class_name.filemaker_table_name, u','.join(fields), u','.join(arguments))
return result
其中class_name映射到匹配的Django类中。
答案 0 :(得分:0)
发现的globals()基本上可以解决这个问题。
功能示例。
depot_maestro.models.get_insert_string(globals()['DriverShiftPreference'])
通话示例:
insert into driver_shift_preferences ( "DEPOT_ID","driver_id","roster_template_id","roster_template____shift_slot_id","vehicle_id","uuid","commission_percentage","drive_name_lookup","lease_fee","levy_1","levy_2","linked_to_id","note","selected","shift_slot","week_id","creation_account_name","created_timestamp","modification_account_name","modification_timestamp" ) values ( ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,? )'
结果示例:
<!DOCTYPE html>
<html>
<head>
<title></title>
<link rel="stylesheet" type="text/css" href="bootstrap-select.min.css">
</head>
<body>
<select class="selectpicker">
<option>Choose</option>
<option>1</option>
<option>1</option>
</select>
<script type="text/javascript" src="jquery-3.3.1.min.js"></script>
<script type="text/javascript" src="bootstrap-select.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
$('.selectpicker').selectpicker();
});
</script>
</body>
</html>
剩下的唯一问题是如何引用在不同模块中存在相同类名的类。