说我有一个经过过滤的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
列。
反正我能做到吗?我唯一想到的就是编写一个函数,如果该函数存在,它将返回更新的city,并在任何地方使用此函数,但是如果这样做,我将不得不替换很多现有的代码。
答案 0 :(得分:0)
在您的模型中
@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
中的逻辑返回城市。