Gar*_*ley 6 python django name-mangling
在 Python 中,我知道名称前面的双下划线会导致 Python 在名称classname前面添加variable,如_classname__variable名称(名称修饰)一样。所以我的问题是,在我被要求修改的 Python/Django 应用程序中,有类型的变量(?)名称tr_rowid_debtor__de_listed_date__lte。这是三个变量(tr_rowid_debtor、de_listed_date和lte)还是 Python 的某种特殊构造?它发生在为 Django 构建查询字符串的语句中......
query = DeTransaction.objects.select_related().filter(
tr_rowid_debtor__de_listed_date__lte=to_date,
tr_rowid_debtor__de_rowid_client__cl_rowid=in_client
).values(
'tr_rowid_debtor','tr_rowid_debtor__de_listed_date',
'tr_payment_date','tr_account','tr_to_agency','tr_to_client'
)
Run Code Online (Sandbox Code Playgroud)
任何建议在这里将不胜感激。
dir*_*irn 12
Django 的 ORM 使用双下划线表示法来指示查询中的某种分隔。在 的情况下tr_rowid_debtor__de_listed_date__lte,发生了三件事。
tr_rowid_debtor指定 on 的属性DeTransaction,这是基于接下来发生的情况的关系de_listed_date指定要查询的相关模型的字段lte<=表示使用(小于或等于)进行比较值得一读Django 的查询文档。详细介绍了这些内容。
至于这是否是Python特有的,其实不是。被__分配给一个名为 的常量LOOKUP_SEP。该值用于str.split()生成WHERE查询子句。