2013-04-20 57 views
0

我使用django-transmeta來翻譯字段,我需要使用這些翻譯字段進行一些搜索。是否可以在Django 1.5.1中使用Q對象的動態屬性?

假設我們有一個名爲translated_field的可翻譯字段的模型。

第一種方法我們可以想到的東西,像往常一樣,如:

Q(translated_field__icontains="some value") # This fails, as `translated_field` field does not exist 

第二種方法將硬編碼的所有可能的語言版本。例如:

Q(translated_field_en__icontains="some value") # English version 
Q(translated_field_es__icontains="some value") # Spanish version 
# Add as many as available languages 

第二種選擇似乎真的硬編碼的,我不知道abount做這樣的事情可能第三個選項

Q(getattr("translated_field") + get_language() + "__icontains"="some value") # pseudocode 

甚至更​​好...有有** kwargs任何選項可用Q對象?

謝謝!

回答

0

您可以動態生成查找參數名稱,將其用作字典鍵,然後在創建Q對象時使用**kwargs

field_name_contains = "translated_field" + get_languaage() + "__icontains") 
kwargs = {field_name_contains: "some value"} 
q = Q(**kwargs) 
+0

謝謝!這就是我一直在尋找的!它像一個魅力。只需要注意一點,我不直接聲明var'kwargs',而是像這樣直接傳遞字典:'Q(** {field_name_contains:「some value」})'否則它會過於冗長,因爲有很多'elifs ':) – Caumons 2013-04-21 00:16:36

相關問題