のレコードのレコードまたはスラグを受け入れるのダックタイピングに優しい方法で私はこのような機能を持っている:bar
今ジャンゴ:入力
def foo(bar):
...
は、いずれかのDjangoのレコードまたはレコードを指しているスラグすることができます。実際のレコードがあるときにこの関数を呼び出すことができるように、またはデータベースから取り出した文字列としてしか利用できないより一般的な関数から呼び出すことができるように、この柔軟性が必要です。
私はのような何かを行うことができます実現:
def foo(bar):
try:
bar.pk
except AttributeError:
bar = Bar.objects.get(slug=bar)
...
しかし、これはすべてのでエレガントないないようです。
私はisinstanceを使用しないでください。
※isinstance *を使用しないでください。* - 特に理由はありますか? – MattH
なぜ2つの異なる機能を作成しないでください。 'foo_with_slug'という新しいものがルックアップを行い、' foo'メソッドを呼び出します。 – sdolan
習慣の力、私は思いますか?私は実際には、私の関数が実際には、文字列や文字列を取ることができるかどうかなど、ダックタイピングによって実際には欺かれる*ときにそれを使うのが好きです。 –