2017-08-02 448 views
1
if request.POST['table'] == 'a': 
    get_table = A_table() 
    get_column = 'a' 
elif request.POST['table'] == 'b': 
    get_table = B_table() 
    get_column = 'b' 

get_table. + get_column + _column = 'some text' 

上面的示例代碼只是一個當然不起作用的想法。將變量值分配爲表列名

如何分配一個變量的值在Django表的列名?

這將在動態過濾一個單獨的函數中使用.. 一個簡單的例子是:

tablename.+'col'+name = 'test data' 

使用EXEC()嘗試並根據我的需要的工作,但其他人認爲,這是一個啓動代碼的不好的方式,任何替代它?

回答

0

Django的1.7後,一個Application Registry加入。它提供了一個方法get_model來動態選擇一個模型。而對於動態字段名稱和值可以過濾使用dict這樣。

from django.db.models.loading import get_model 


def get_queryset(data): 
    # :param data dict 
    # :return: QuerySet 
    model_name = data.get('model', 'DefaultModel') 
    column = data.get('column', 'DefaultColumn') 
    value = data.get('value', 'DefaultValue') 
    model = get_model('YourAPP', model_name) 
    qs = model.objects.filter(**{column: value}) 
    return qs