Как переопределить точечный доступ к объектам для определенного столбца в Django? - PullRequest
0 голосов
/ 26 апреля 2019

Скажем, у меня есть объект Django, который я отфильтровал следующим образом:

details_obj = DetailsTable.objects.get(user_name='nap')

details_obj.user_name
'nap'

details_obj.city
'Paris'

details_obj.age
22

Теперь я хочу переопределить доступ к одному конкретному столбцу для достижения чего-то вроде:

# if a new city exists in a different table
if updated_city_exists:
    # return the updated city instead
    return 'London'
else:
    # the usual flow that currently exists in Django
    return obj.city 

# is user accesses city like
details_obj.city
'London' 
# London returned here as updated city exists for this user

Я не могу реально изменить модель существующего DetailsTable, потому что это уже существующий код, который использовался много раз.

Также в коде есть много мест, где точка доступа к городу уже имеет место.Поэтому я хотел бы переопределить существующий метод для доступа к значению столбца.

Я также не хочу обновлять столбец city в существующем столбце DetialsTable.

Могу ли я в любом случае добиться этого?Единственное, о чем я мог подумать, - написать функцию, которая вернула бы обновленный город, если он существует, и использовать эту функцию везде, но мне придется заменить большую часть существующего кода, если я сделаю это.

1 Ответ

0 голосов
/ 26 апреля 2019

В вашей модели

@property
def updated_city(self):
    # if a new city exists in a different table
    if updated_city_exists:
        # return the updated city instead
        return 'London'
    # the usual flow that currently exists in Django
    return obj.city

Теперь details_obj.updated_city вернет город согласно вашей логике в def updated_city.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...