私はこのような機能を持っています:
def foo(bar):
...
bar
これで、Djangoレコードまたはレコードを指すスラッグのいずれかになります。実際のレコードが手元にあるときにこの関数を呼び出すことができるように、または文字列としてのみ使用可能なバー(データベースから取得)を持つより一般的な関数からこれを呼び出すことができるように、この柔軟性が必要です。
私は次のようなことができることに気づきました。
def foo(bar):
try:
bar.pk
except AttributeError:
bar = Bar.objects.get(slug=bar)
...
しかし、これはまったくエレガントではないようです。
可能であれば、isinstanceの使用を避けたいと思います。