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
实例,如果是,则它将它转换到相应的主键。
你想复制什么...我不确定,但他们会检查他们的关键字参数类型... –