Ограничение количества записей, возвращаемых с помощью 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]

также как я должен получить уникальные записи?

Спасибо

Вернуться на верх