Django gira su Python, che definisce alcuni vincoli fondamentali quando si tratta di sintassi, rendendo la seguente sintassi suggerita impossibile (Python non permette molto di ri-definizione di sintassi di base):
[entry.objects if blog.id=3 ]
Inoltre, " blog "e" id "non sono oggetti, si riferiscono ai nomi nel database, quindi anche l'indirizzamento a questi come blog.id
è problematico. A meno che non venga immesso come una stringa, che in realtà è ciò che viene fatto visto che gli argomenti delle parole chiave vengono passati come oggetti dizionario in Python. Si potrebbe naturalmente essere fatto in altri modi, ecco un esempio di come utilizzare i punti come separatori:
def dotstyle(dict):
retdict = {}
for key, value in dict.items():
retdict[key.replace(".", "__")] = value
return retdict
Entry.objects.filter(**dotstyle({"blog.id": 3})
Incorporando questo per la funzione di filtro in Django, potremmo fare via con la funzione dotstyle e il goffo **, ma ci rimangono ancora le parentesi graffe del dizionario, che è probabilmente il motivo per cui sono state utilizzate con i doppi underscore.
fonte
2011-03-30 05:40:39
Non trovo nulla di sbagliato in questo, ma sono curioso di altre opzioni realistiche e pulite. Passare argomenti a una funzione python è una parte enorme della lingua e gli autori hanno sfruttato i nomi degli argomenti delle parole chiave. 'fields_and_lookups = kwarg.split ('__')' –