私は、次の機能を持っている:文字列を引数名として渡すにはどうすればよいですか?
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()
アクションクラスです。クラスには複数の属性があり、最初にどの属性が値を取得するかわかりません。
属性名は動的です。
kwarg fk
をクラスアクションの実際の属性にします。 FKは口座または会社とすることができます。
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)
私は、フォーラムにいくつかの答えが、私には何も関連を発見した、またはパイソンインチ 他のサイトでevalを使用する提案がありましたが、evalは安全ではありません。
役立ちリンクです:https://stackoverflow.com/questions/3394835/args-and-kwargs –
あなたには、いくつかの例を与えた場合、それが参考になる*が値属性は、辞書アンパックを使用してそれに沿って渡します*とエミュレートしたい呼び出しの種類の例。あなたは 'Action(..、fk = ...)'の 'fk'は' fk'変数に基づく可変の値でなければならないと言っていますか? 'アクション(...、foo = fk_value)'? – deceze
@decezeもっと情報が追加されました、djangoですインスタンスを作成し、fkは外部キーです – user3541631