Ограничение количества записей, возвращаемых с помощью getattr в модели django
В настоящее время работаю над биллинговым приложением для базы данных нескольких компаний. Где некоторые данные зависят от кода компании, а некоторые нет. Для фильтрации данных для каждой модели данных я пытаюсь сделать общую функцию для фильтрации каждой модели данных.
я использую индикацию на уровне модели для каждой модели данных, чтобы узнать, зависят ли данные от компании или нет. мой общий метод выглядит следующим образом.
def filter_Company_or_Group(dbModelName, compGroup, compId, filter = {}, ModelLevel = '',
orderByField = '', recordLimit = -1, unique = False):
if ModelLevel == '':
ModelLevel = getdbModelLevel(dbModelName)
if ModelLevel == '':
ModelLevel = 'Global'
q_objects = Q()
modelFilter = {}
if ModelLevel == 'Company':
modelFilter = {'company_id' : compId}
q_objects = Q(company_id = compId)
if ModelLevel == 'Group':
modelFilter = {'company_Group_id' : compGroup}
q_objects = Q(company_Group_id = compGroup)
if ModelLevel == 'Company OR Group':
q_objects |= Q(company_id = compId)
q_objects |= Q(company_Group_id = compGroup)
if ModelLevel == 'Global' or ModelLevel == 'ANY':
q_objects = Q()
if filter != {}:
for key, value in filter.items():
q_objects &= Q(**{key: value})
if orderByField == '' :
orderByField = 'id'
objList = getattr(billing.models, dbModelName).objects.order_by(orderByField).filter(q_objects)
if recordLimit != -1:
objList = objList[:recordLimit]
return objList
Здесь метод getdbModelLevel возвращает уровень метода, если он зависит от компании или нет.
Мой вопрос в том, что когда я пытаюсь ограничить количество строк до 1, это не работает, так как метод first(), но для каждого возврата, нужно сделать оператор if, например,
filters = {'UOM_Code' : 'MT' }
objUOM = filter_Company_or_Group('UOM',compGroup, compId, filters,'','',1)
objUOM = UOM.objects.filter(company_id = compId, UOM_Code = 'MT').first()
if objUOM:
objUOM = objUOM[0]
также как я должен получить уникальные записи?
Спасибо