Django/Django Rest Framework

14. Django DRF dir

S.T.Lee 2022. 6. 19. 17:29

dir() - 객체이 존재하는 변수, 메소드 등을 출력해주는 함수

특정 object를 dir(object)  형태로 사용시 역참조 확인 가능한 항목들을 불러올 수 있다.

 

class User(AbstractBaseUser):
    ...

class UserProfile(models.Model):
    user = models.OneToOneField(to=User)
    hobby = models.ManyToManyField("Hobby", verbose_name="취미")
    ...

class Hobby(models.Model):
    ...

# views.py
user = User.objects.get(id=obj_id)
hobby = Hobby.objects.get(id=obj_id)

print(dir(user))
print(dir(hobby))

# result dir(user) print
"""
['DoesNotExist', 'Meta', 'MultipleObjectsReturned', 'REQUIRED_FIELDS', 'USERNAME_FIELD', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setstate__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_check_column_name_clashes', '_check_constraints', '_check_default_pk', '_check_field_name_clashes', '_check_fields', '_check_id_field', '_check_index_together', '_check_indexes', '_check_local_fields', '_check_long_column_names', '_check_m2m_through_same_relationship', '_check_managers', '_check_model', '_check_model_name_db_lookup_clashes', '_check_ordering', '_check_property_name_related_field_accessor_clashes', 
'_check_single_primary_key', '_check_swappable', '_check_unique_together', '_do_insert', '_do_update', '_get_FIELD_display', '_get_expr_references', '_get_next_or_previous_by_FIELD', '_get_next_or_previous_in_order', '_get_pk_val', '_get_unique_checks', '_meta', '_password', '_perform_date_checks', '_perform_unique_checks', '_prepare_related_fields_for_save', '_save_parents', '_save_table', '_set_pk_val', '_state', 'check', 'check_password', 'clean', 'clean_fields', 'date_error_message', 'delete', 'email', 'from_db', 'full_clean', 'fullname', 'get_deferred_fields', 'get_email_field_name', 'get_next_by_join_date', 'get_previous_by_join_date', 'get_session_auth_hash', 'get_username', 'has_module_perms', 'has_perm', 'has_usable_password', 'id', 'is_active', 'is_admin', 'is_anonymous', 'is_authenticated', 'is_staff', 'join_date', 'last_login', 'logentry_set', 'natural_key', 'normalize_username', 'objects', 'password', 'pk', 'prepare_database_save', 'refresh_from_db', 'save', 'save_base', 'serializable_value', 'set_password', 'set_unusable_password', 
'unique_error_message', 'username', 'userprofile', 'validate_unique']
"""

# result dir(hobby) print
"""
[..., userprofile_set, ...]
"""

user를 바라보고 있는 UserProfile은 One-to-one 관계기 때문에 _set이 붙지 않는다

hobby를 바라보고 있는 UserProfile은 Many-to-many 관계기 때문에 _set이 붙는다

ForeignKey를 사용했을 떄 또한 _set이 붙게 된다