双下划线表示什么?

时间:2014-01-23 21:35:46

标签: python django name-mangling

在Python中,我知道名称前面的双下划线会导致Python将classname添加到variable名称中,如_classname__variable名称(名称重整)。所以我的问题是,在我被要求修改的Python / Django应用程序中,有tr_rowid_debtor__de_listed_date__lte类型的变量(?)名称。这三个变量(tr_rowid_debtorde_listed_datelte)或者这是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'
)

欢迎任何建议。

1 个答案:

答案 0 :(得分:1)

Django的ORM使用双下划线表示法来表示查询中的某种分离。在tr_rowid_debtor__de_listed_date__lte的情况下,发生了三件事。

  1. tr_rowid_debtor指定DeTransaction上的属性,这是一种基于接下来发生的事情的关系
  2. de_listed_date指定要查询的相关模型的字段
  3. lte表示要使用<=(小于或等于)执行比较
  4. 值得一读Django's query docs。详细介绍了这些内容。

    至于这是否对Python来说是特殊的,事实并非如此。 __被分配给名为LOOKUP_SEP的常量。该值与str.split()一起用于为查询生成WHERE子句。