Giả sử tôi có hai mô hình đơn giản:
Địa điểm lớp học (models.Model):
tên = models.CharField(max_length=200)
địa chỉ = models.CharField(max_length=200)
Sự kiện lớp (models.Model):
tên = models.CharField(max_length=200)
ngày = mô hình.DateField()
địa điểm = models.ForeignKey(Địa điểm)
Điều tôi muốn làm bây giờ là truy vấn một tập hợp sự kiện với các vị trí được phân tích cú pháp và chuyển đổi mọi thứ thành danh sách từ điển mà sau này tôi có thể chuyển đổi sang JSON.
Kết quả cuối cùng sẽ trông như thế này:
[{
"tên": "sự kiện1",
"ngày": "ngày 1",
"địa điểm": {
"tên": "địa điểm1",
"địa chỉ": "địa chỉ1",
},
},{
"tên": "sự kiện2",
"ngày": "ngày2",
"địa điểm": {
"tên": "địa điểm2",
"địa chỉ": "địa chỉ2",
},
},]
Cho đến nay tôi đã sử dụng Bộ truy vấn giá trị
Và .values()
Cách thử vận may:
Event.objects.all().select_similar("place").values()
Nhưng điều này sẽ không hiệu quả vì .values()
Chỉ ID của đối tượng liên quan được trả về thay vì nội dung. Vì vậy, tôi tự hỏi liệu có cách tích hợp nào khác để thực hiện chuyển đổi này hay không hoặc liệu tôi có phải lặp lại đối tượng QuerySet và tự mình thực hiện chuyển đổi hay không.
Không có cách mặc định nào để tạo từ điển lồng nhau mà bạn muốn nhưng bạn có thể chọn giá trị của các mục liên quan:
# Không cần chọn_liên quan trong trường hợp này
Event.objects.values('name', 'date', 'place__name', 'place__address')
[{
"tên": "sự kiện1",
"ngày": "ngày 1",
"place__name": "địa điểm1",
"place__address": "địa chỉ1",
},{
"tên": "sự kiện2",
"ngày": "ngày2",
"place__name": "place2",
"place__address": "address2",
}]
Nếu thực sự cần thiết, bạn có thể thực hiện một số xử lý hậu kỳ bằng Python để có được từ điển lồng nhau mà bạn muốn.
Tôi là một lập trình viên xuất sắc, rất giỏi!