2011-01-04 9 views
1

Ich verwende Ajax, um Daten in eine Django-Ansicht mit Daten zu senden, die über request.POST eingehen. Ich poste das Modellfeld, das aktualisiert werden muss, sowie den Modellwert. Ich muss nur wissen, wie man die Feldnamenvariable verwendet, die ich aus request.POST ['field_name'] extrahiere, damit ich das Feld im Modell setzen kann. Hier ist mein Code.django request.POST Feldname Ersetzung

field_name = request.POST["field_name"] 
field_value = request.POST["field_value"] 

member_id = get_member_session(request).id 
try: 
    member = Members.objects.get(id=member_id) 
except: 
    status="ERROR-USER-DOES-NOT-EXIST" 
    return json_status(status) 

try: 
    member.field_name=field_value 
    member.save() 
    return json_status('OK') 
except: 
    status = "USER_SAVE_ERROR" 
    return json_status(status) 

member.field_name ist offensichtlich nicht richtig. Muss ich eval (field_name) oder etwas ähnliches verwenden? Ich würde es vorziehen, wenn nicht möglich.

Vielen Dank

Rich-

Antwort

5

Verwenden setattr, das Sie eine Variable Attribut für ein Objekt festlegen können:

try: 
    member._meta.get_field(field_name) 
except member.FieldDoesNotExist: 
    # return something to indicate the field doesn't exist 
    return json_status('USER_FIELD_ERROR') 

setattr(member, field_name, field_value) 
member.save() 
return json_status('OK') 

edit: Ich aktualisiert model._meta.get_field zu verwenden, da es ein besserer Ansatz ist . Erwähnt in this answer for another question.

+0

Wow fabelhaft, danke Alex! – Rich

+0

Entschuldigen Sie, um das grüne Häkchen einzufügen, aber ich habe den Code eingegeben und den folgenden Fehler erhalten: 'Argument des Typs' Mitglieder 'ist nicht iterierbar' auf Ihrem 'if field_name in member:'. Ich kann nicht sehen, was es ist. Ich habe die 'if'-Anweisung entfernt und es funktioniert großartig, aber besser gesagt nicht vollständig richtig, bis ich die Antwort kenne. Danke nochmal Alex – Rich

+0

Danke nochmal Alex! – Rich

Verwandte Themen