Ich habe die folgende Funktion:Wie gebe ich eine Zeichenfolge als Argumentnamen?
def create_act(user, verb, fk_name=None, fk_value=None):
fk = getattr(Action, fk_name)
action = Action(user=user, verb=verb, fk=fk_value)
action.save()
Aktion eine Klasse ist. Die Klasse hat mehrere Attribute, und ich weiß zu Beginn nicht, welches Attribut einen Wert erhalten wird.
Ich bekomme den Attributnamen dynamisch.
Ich möchte die Kwarg fk
, ein tatsächliches Attribut der Sammelklage sein. FK kann Konto oder Firma sein.
class Action(models.Model):
account = models.ForeignKey(Account, blank=True, null=True, related_name='activity', on_delete=models.CASCADE)
company = models.ForeignKey(Company, blank=True, null=True, related_name='activity', on_delete=models.CASCADE)
ich in den Foren fand einige Antworten, aber nichts für mich relevant oder in Python. Ich habe einige Vorschläge auf anderen Websites gesehen, um eval zu verwenden, aber eval ist nicht sicher.
hier ist ein hilfreicher Link: https://stackoverflow.com/questions/3394835/args-and-kwargs –
es wäre hilfreich, wenn Sie einig Beispiel gibt * Werte * und ein Beispiel dafür, welche Art von Anruf Sie emulieren möchten. Versuchen Sie zu sagen, dass "fk" in "Action (.., fk = ...)" ein variabler Wert sein sollte, basierend auf der 'fk'-Variable, z. 'Aktion (..., foo = fk_value)'? – deceze
@deceze mehr Info hinzugefügt, ist Django ich erstelle eine Instanz und fk ist ein Fremdschlüssel – user3541631