0
django如何處理可以是主鍵或對象的參數?Django,如何在一個函數中處理pk和對象
例如,MyModel.objects.filter(my_field=id)
作品和MyModel.objects.filter(my_field=my_obj)
也適用。
django如何做到這一點? (我想複製它)
django如何處理可以是主鍵或對象的參數?Django,如何在一個函數中處理pk和對象
例如,MyModel.objects.filter(my_field=id)
作品和MyModel.objects.filter(my_field=my_obj)
也適用。
django如何做到這一點? (我想複製它)
該邏輯由get_normalized_value
方法在django.db.models.fields.related_lookups
進行:
def get_normalized_value(value, lhs):
from django.db.models import Model
if isinstance(value, Model):
value_list = []
sources = lhs.output_field.get_path_info()[-1].target_fields
for source in sources:
while not isinstance(value, source.model) and source.remote_field:
source = source.remote_field.model._meta.get_field(source.remote_field.field_name)
try:
value_list.append(getattr(value, source.attname))
except AttributeError:
# A case like Restaurant.objects.filter(place=restaurant_instance),
# where place is a OneToOneField and the primary key of Restaurant.
return (value.pk,)
return tuple(value_list)
if not isinstance(value, tuple):
return (value,)
return value
基本上,它檢查該值是否爲Model
實例,如果是,則它將它轉換到相應的主鍵。
你想複製什麼...我不確定,但他們會檢查他們的關鍵字參數類型... –