在本文中,我们将为您详细介绍如何在qwebreportodoo12中通过Python获取xml中模型的字段值?的相关知识,此外,我们还会提供一些关于C#通过反射获取类型的字段值及给字段赋值的操作、Fa
在本文中,我们将为您详细介绍如何在qweb report odoo 12中通过Python获取xml中模型的字段值?的相关知识,此外,我们还会提供一些关于C# 通过反射获取类型的字段值及给字段赋值的操作、Facebook Marketing API-通过Python获取见解-达到用户请求限制、python – 如何在调用is_valid()方法后更改表单字段值?、Python-在Python中通过“ElementTree”解析带有名称空间的XML的有用信息。
本文目录一览:- 如何在qweb report odoo 12中通过Python获取xml中模型的字段值?
- C# 通过反射获取类型的字段值及给字段赋值的操作
- Facebook Marketing API-通过Python获取见解-达到用户请求限制
- python – 如何在调用is_valid()方法后更改表单字段值?
- Python-在Python中通过“ElementTree”解析带有名称空间的XML
如何在qweb report odoo 12中通过Python获取xml中模型的字段值?
user10810227
您必须访问 data['categ']
而不仅仅是 categ
XML
中的 for-loop
。
我的回答特别不是关于为什么模型作为字符串返回,而是关于如何使这个报告工作。
- 您可以直接从 XML 查询模型并像这样在其中循环
<t t-foreach="request.env['product.category'].search([])" t-as="c">
<tr>
<td width="20%"><span t-field="c.name"/>/td>
</tr>
</t>
- 在我之前评论的第二种方法中,您可以使用 python 传递字典列表并在 XML 中循环它们。 类似的东西
def print_report_status(self):
active_ids=self.env.context.get('active_ids',[])
prd_categ= self.env['product.category'].search([])
datas={
'ids':active_ids,'model':'report.model','form' : self.read()[0],'categ': [{'name': i['name']} for i in prd_categ]
}
return self.env.ref('product_report.action_report_pr').report_action(self,data=datas)
然后像以前一样在 XML 中循环数据。
,我想你可以在你的 xml 模板中试试这个
<t t-set="categs" t-value="categ"/>
<t t-foreach="categs" t-as="c">
*something here*
</t>
C# 通过反射获取类型的字段值及给字段赋值的操作
举例:
存在一个类:
Public Class Student { public string name; public int age; } Student stu1 = new Student();
现在,我们想通过反射在运行时给stu1的name 和 age字段 赋值,让name = “小明”,age = 15,怎么做?
简单的代码如下:
...略 using System.Reflection;//反射类 ...略 static void Main(string[] args) { Type t = stu1.GetType(); FieldInfo filedInfo1 = t.GetField(”name"); FieldInfo filedInfo2 = t.GetField(”age"); fieldInfo1.SetValue(stu1,"小明"); fieldInfo2.SetValue(stu1,15); }
需要注意的是:FieldInfo的SetValue方法有可能会导致异常,比如 fieldInfo2.SetValue(stu1,“15”),这句话给一个int型字段赋了string类型的值,编译是不会报错的,在运行时会抛出一个System.ArgumentException异常,请多加注意.
有了以上的了解,让我们写一个简单的动态字段赋值/取值类Dynamic
具体代码如下:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Reflection; namespace MyUnityHelper { /// <summary> /// 动态编译类 /// </summary> public class Dynamic { /// <summary> /// 动态赋值 /// </summary> /// <param name="obj"></param> /// <param name="fieldName"></param> /// <param name="value"></param> public static void SetValue(object obj,string fieldName,object value) { FieldInfo info = obj.GetType().GetField(fieldName); info.SetValue(obj, value); } /// <summary> /// 泛型动态赋值 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="obj"></param> /// <param name="fieldName"></param> /// <param name="value"></param> public static void SetValue<T>(object obj, string fieldName, T value) { FieldInfo info = obj.GetType().GetField(fieldName); info.SetValue(obj, value); } /// <summary> /// 动态取值 /// </summary> /// <param name="obj"></param> /// <param name="fieldName"></param> /// <returns></returns> public static object GetValue(object obj, string fieldName) { FieldInfo info = obj.GetType().GetField(fieldName); return info.GetValue(obj); } /// <summary> /// 动态取值泛型 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="obj"></param> /// <param name="fieldName"></param> /// <returns></returns> public static T GetValue<T>(object obj,string fieldName) { FieldInfo info = obj.GetType().GetField(fieldName); return (T)info.GetValue(obj); } } }
补充:C#利用反射方法实现对象的字段和属性之间值传递
在面向对象开发过程中,往往会遇到两个对象之间进行值传递的情况,如果对象中的属性和字段较多,手动一一赋值效率实在太低。
这里就整理了一个通用的对象之间进行值传递的方法,并且考虑到对象中可能包含类属性,因此还用到了递归以解决这个问题。
下面上代码:
public static void ConvertObject(object SrcClass, object DesClass, bool convertProperty = true, bool convertField = true, bool showError = true) { try { if (SrcClass == null) { return; } if (convertProperty) { PropertyInfo[] srcProperties = SrcClass.GetType().GetProperties(); PropertyInfo[] desProperties = DesClass.GetType().GetProperties(); if (srcProperties.Length > 0 && desProperties.Length > 0) { foreach (var srcPi in srcProperties) { foreach (var desPi in desProperties) { if (srcPi.Name == desPi.Name && srcPi.PropertyType == desPi.PropertyType && desPi.CanWrite) { if (srcPi.PropertyType.IsClass) { ConvertObject(srcPi.GetValue(SrcClass, null), desPi.GetValue(DesClass, null), convertProperty, convertField, showError); } else { Object value = srcPi.GetValue(SrcClass, null); desPi.SetValue(DesClass, value, null); } } } } } } if (convertField) { FieldInfo[] srcFields = SrcClass.GetType().GetFields(); FieldInfo[] desFields = DesClass.GetType().GetFields(); if (srcFields.Length > 0 && desFields.Length > 0) { foreach (var srcField in srcFields) { foreach (var desField in desFields) { if (srcField.Name == desField.Name && srcField.FieldType == desField.FieldType) { if (srcField.FieldType.IsClass) { ConvertObject(srcField.GetValue(SrcClass), desField.GetValue(DesClass), convertProperty, convertField, showError); } else { Object value = srcField.GetValue(SrcClass); desField.SetValue(DesClass, value); } } } } } } } catch (Exception ex) { if (showError) { MessageBox.Show($"Convert Error: Method={nameof(ConvertObject)}, Message={ex.Message}"); } else { throw new Exception($"Convert Error: Method={nameof(ConvertObject)}, Message={ex.Message}"); } } }
以上为个人经验,希望能给大家一个参考,也希望大家多多支持。如有错误或未考虑完全的地方,望不吝赐教。
- C# WPF如何反射加载Geometry几何图形数据图标
- c# 反射用法及效率对比
- c# 反射+自定义特性保存数据至本地
- 详解C# 反射(Reflection)
- 关于C#反射 你需要知道的
- C# 反射与dynamic最佳组合示例代码
- C#中反射和扩展方法如何运用
- C# 反射与 Quartz 实现流程处理详情
Facebook Marketing API-通过Python获取见解-达到用户请求限制
因此,我正在竭尽全力在Facebook
API中导航。我需要创建一个脚本,该脚本每天将以csv文件的形式下载我公司的广告系列信息,因此我可以使用另一个脚本轻松地将该信息上传到我们的数据库中。
我终于有了可以将信息打印到日志的代码,但是由于用户必须分别为每个单个活动调用get_insights(),因此我达到了用户请求的限制。我想知道是否有人知道如何帮助我做到这一点,所以我不必经常调用facebook
API。
如果我找到一个可以获取每日支出的字段,那么我该怎么办,这样我就不必在for Campaign循环的每次迭代中都调用API,但是我一生都找不到解决方法。
#Import all the facebook mumbo jumbo
from facebookads.api import FacebookAdsApi
from facebookads.adobjects.adset import AdSet
from facebookads.adobjects.campaign import Campaign
from facebookads.adobjects.adsinsights import AdsInsights
from facebookads.adobjects.adreportrun import AdReportRun
from facebookads.adobjects.adaccount import AdAccount
from facebookads.adobjects.business import Business
import time
#Set the login info
my_app_id = '****'
my_app_secret = '****'
my_access_token = '****'
#Start the connection to the facebook API
FacebookAdsApi.init(my_app_id,my_app_secret,my_access_token)
business = Business('****')
#Get all ad accounts on the business account
accounts = business.get_owned_ad_accounts(fields=[AdAccount.Field.id])
#iterate through all accounts in the business account
for account in accounts:
tempaccount = AdAccount(account[AdAccount.Field.id])
#get all campaigns in the adaccount
campaigns = tempaccount.get_campaigns(fields=[Campaign.Field.name,Campaign.Field])
#iterate trough all the campaigns in the adaccount
for campaign in campaigns:
print(campaign[Campaign.Field.name])
#get the insight info (spend) from each campaign
campaignsights = campaign.get_insights(params={'date_preset':'yesterday'},fields=[AdsInsights.Field.spend])
print (campaignsights)
python – 如何在调用is_valid()方法后更改表单字段值?
我在使用form.is_valid验证数据后尝试更改字段u_id(这是必需的).我可以改变数据,甚至在HttpResponse中显示它,但我不能把它写入我的Postgresql DB.有任何想法吗?
class ProductForm(forms.ModelForm): class Meta: model = Product class Product(models.Model): p_name = models.CharField(max_length=30) u_id = models.CharField(max_length=80) def uploadImage(request): if request.method == 'POST': form1 = ProductForm(request.POST,prefix="product") if form.is_valid() and form1.is_valid(): form1.cleaned_data['uid']='12134324231' form1.save() return HttpResponse(form1.cleaned_data['p_name']) return render_to_response('upload.html',{'form': form,'form1': form1},RequestContext(request))
解决方法
if form.is_valid() and form1.is_valid(): instance = form1.save(commit=False) instance.uid = '12134324231' instance.save()
如果form1具有任意多对多关系,则必须调用save_m2m方法来保存多对多表单数据.有关详细信息,请参阅文档.
Python-在Python中通过“ElementTree”解析带有名称空间的XML
我有以下要使用Python解析的XML ElementTree
:
<rdf:RDF xml:base="http://dbpedia.org/ontology/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:owl="http://www.w3.org/2002/07/owl#" xmlns:xsd="http://www.w3.org/2001/XMLSchema#" xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" xmlns="http://dbpedia.org/ontology/"> <owl:Class rdf:about="http://dbpedia.org/ontology/BasketballLeague"> <rdfs:label xml:lang="en">basketball league</rdfs:label> <rdfs:comment xml:lang="en"> a group of sports teams that compete against each other in Basketball </rdfs:comment> </owl:Class></rdf:RDF>
我想找到所有owl:Class
标签,然后提取其中所有rdfs:label
实例的值。我正在使用以下代码:
tree = ET.parse("filename")root = tree.getroot()root.findall(''owl:Class'')
由于命名空间的原因,出现以下错误。
SyntaxError: prefix ''owl'' not found in prefix map
请让我知道如何更改代码以查找所有owl:Class
标签。
答案1
小编典典ElementTree对名称空间不太聪明。你需要给的.find(),findall()和iterfind()方法的明确的命名空间字典。这没有很好的记录:
namespaces = {''owl'': ''http://www.w3.org/2002/07/owl#''} # add more as neededroot.findall(''owl:Class'', namespaces)
前缀仅在namespaces
你传入的参数中查找。这意味着你可以使用任何喜欢的名称空间前缀;API会分开owl:一部分,在namespaces
字典中查找相应的名称空间URL ,然后更改搜索以查找XPath表达式{http://www.w3.org/2002/07/owl}Class
。当然,你也可以自己使用相同的语法:
root.findall(''{http://www.w3.org/2002/07/owl#}Class'')
如果可以切换到lxml库,那就更好了;该库支持相同的ElementTree API
,但会在.nsmap
元素的属性中为你收集名称空间。
我们今天的关于如何在qweb report odoo 12中通过Python获取xml中模型的字段值?的分享已经告一段落,感谢您的关注,如果您想了解更多关于C# 通过反射获取类型的字段值及给字段赋值的操作、Facebook Marketing API-通过Python获取见解-达到用户请求限制、python – 如何在调用is_valid()方法后更改表单字段值?、Python-在Python中通过“ElementTree”解析带有名称空间的XML的相关信息,请在本站查询。
本文标签: