django의 모델to_dict

1828 단어 django
def model_to_dict(instance, fields=None, exclude=None):
    """
    Returns a dict containing the data in ``instance`` suitable for passing as
    a Form's ``initial`` keyword argument.

    ``fields`` is an optional list of field names. If provided, only the named
    fields will be included in the returned dict.

    ``exclude`` is an optional list of field names. If provided, the named
    fields will be excluded from the returned dict, even if they are listed in
    the ``fields`` argument.
    """
    from django.db import models
    opts = instance._meta
    data = {}
    for f in chain(opts.concrete_fields, opts.private_fields, opts.many_to_many):    
        if not getattr(f, 'editable', False):
            continue
        if fields and f.name not in fields:
            continue
        if exclude and f.name in exclude:
            continue
        data[f.name] = f.value_from_object(instance)
        # Evaluate ManyToManyField QuerySets to prevent subsequent model
        # alteration of that field from being reflected in the data.
        if isinstance(f, models.ManyToManyField):
            data[f.name] = list(data[f.name])
    return data
    
@total_ordering
@python_2_unicode_compatible
class Field(RegisterLookupMixin):
        # "      ..."
        def value_from_object(self, obj):
        """
        Returns the value of this field in the given model instance.
        """
            return getattr(obj, self.attname)

위에는django중모델to_dict의 원본 코드는 주석을 통해 우리는 이 방법의 작용을 매우 잘 알 수 있다. 그러나 실체 프로젝트에서 dict를 구성하는 방식을 반환값으로 하는 것에 습관이 되었기 때문에 대부분의 경우 우리는 그것을 생각하지 못한다. 그래서 나는 그를 잊었지만 그 편리함을 소홀히 해서는 안 된다.
장면 작업
  • 모델 필드가 많고 전부 되돌려야 하거나 대부분 되돌려야 할 때
  • 모델의 몇 개의 필드 값만 사용하고 자주 사용하지 않는 모델뷰
  • 좋은 웹페이지 즐겨찾기