2016-06-18 14 views
0

djangoはプライマリキーまたはオブジェクトにできるパラメータをどのように扱いますか?Django、1つの関数でpkとオブジェクトを扱う方法

例えばMyModel.objects.filter(my_field=id)があり、MyModel.objects.filter(my_field=my_obj)も有効です。

ジャンゴはどのようにしていますか?

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インスタンスであるかどうかをチェックし、それがある場合に、それを変換する:

+0

複製したいもの...わかりませんが、キーワード引数のタイプを確認します... –

答えて

0

このロジックはdjango.db.models.fields.related_lookupsget_normalized_value方法により行われるが(私はそれを複製したいです)対応する主キーに追加します。

関連する問題