Django chạy trên Python, mà đặt ra một số hạn chế cơ bản khi nói đến cú pháp, làm cho cú pháp sau đề nghị bất khả thi (Python không cho phép nhiều lại định nghĩa của cú pháp cơ bản):
[entry.objects if blog.id=3 ]
Ngoài ra, " blog "và" id "không phải là đối tượng, chúng đề cập đến tên trong cơ sở dữ liệu, vì vậy việc giải quyết các tên này là blog.id
cũng có vấn đề. Trừ khi tất nhiên nó được nhập như là một chuỗi, mà thực sự là những gì đang được thực hiện nhìn thấy như là đối số từ khóa được thông qua như là một đối tượng từ điển trong Python. Nó có thể đương nhiên được thực hiện theo những cách khác, đây là một ví dụ về cách sử dụng dấu chấm như dải phân cách:
def dotstyle(dict):
retdict = {}
for key, value in dict.items():
retdict[key.replace(".", "__")] = value
return retdict
Entry.objects.filter(**dotstyle({"blog.id": 3})
Bằng cách kết hợp này với chức năng lọc trong Django, chúng ta có thể loại bỏ các chức năng dotstyle và vụng về **, nhưng chúng tôi vẫn còn lại với niềng răng từ điển, đó có lẽ là lý do tại sao họ đã đi với các dấu gạch dưới đôi để thay thế.
Nguồn
2011-03-30 05:40:39
Tôi không tìm thấy bất cứ điều gì sai trái với nó, nhưng tôi tò mò về bất kỳ lựa chọn thực tế và sạch sẽ khác. Việc chuyển đối số cho hàm python là một phần cực kỳ cơ bản của ngôn ngữ và các tác giả đã tận dụng các tên đối số từ khóa. 'fields_and_lookups = kwarg.split ('__')' –