2015-02-27 20 views
8

Tôi là người mới bắt đầu ở Django. Và tôi cần phải chuyển đổi mô hình dụ trong từ điển tương tự như Model.objects.values ​​làm, với các lĩnh vực quan hệ. Vì vậy, tôi viết một hàm nhỏ để làm điều này:django chuyển đổi mô hình dụ thành dict

def _get_proper(instance, field): 
    if field.__contains__("__"): 
     inst_name = field.split("__")[0] 
     new_inst = getattr(instance, inst_name) 
     next_field = "__".join(field.split("__")[1:]) 
     value = _get_proper(new_inst, next_field) 
    else: 
     value = getattr(instance, field) 

    return value 

def instance_to_dict(instance, fields): 
    return {key: _get_proper(instance, key) for key in fields} 

Vì vậy, tôi có thể sử dụng nó theo cách như vậy:

user_obj = User.objects.select_related(...).get(...) 
print instance_to_dict(user_obj, ["name", "city__name", "city_id"]) 

bạn có thể đề xuất các giải pháp tốt hơn? Cảm ơn! P.S. Xin lỗi vì tiếng Anh của tôi.

+0

trùng lặp có thể xảy ra của [Chuyển đổi Django mẫu đối tượng để dict với tất cả các lĩnh vực còn nguyên vẹn] (http://stackoverflow.com/questions/21925671/convert-django-model-object-to -dict-with-all-of-the-fields-nguyên vẹn) – Zags

Trả lời

15

This actually already exists in Django, but its not widely documented.

from django.forms import model_to_dict 
my_obj = User.objects.first() 
model_to_dict(my_obj, 
    fields = [...], # fields to include 
    exclude = [...], # fields to exclude 
) 
+2

Tôi biết về nó, nhưng chức năng này không hoạt động với các lĩnh vực liên quan như 'city__name' –

+0

Liên kết không hoạt động. Đây là liên kết được cập nhật: http://timsaylor.com/convert-django-model-instances-to-dictionaries – jackbravo

Các vấn đề liên quan