答えは、モデルとアプリケーションによって大きく異なります。コンテンツ タイプ フレームワークをどの程度正確に使用していますか?
一般的に言えば、コンテンツ タイプ フレームワークの使用を制御する追加の抽象化レイヤーを用意することをお勧めします。
例
例を作ってみましょう。これらのモデルがあるとしましょう: Portal、Cube、およびCake。Portal
およびCube
パブリックCake
ですが、特定の権限を持つユーザーに対してプライベートです。
私があなたを理解している限り、あなたのアプローチは次のようなものです:
# gets called via GET with parameters content_type_id and object_id
def modify_object(request, content_type_id, object_id)
content_type = ContentType.objects.get_for_id(content_type_id)
model_class = content_type.model_class()
instance = model_class.objects.get(pk=object_id)
# modify instance - could also be a "Cake"
instance.save()
特定のタイプのオブジェクトのみを変更できるようにしたい場合、これは脆弱です。content_type のチェックを追加することもできますが、それは非常に洗練されていて、巧妙に設計されているようには見えません。
代わりに、一般的ではないアプローチを採用します。ユーザーに許可するモデルのさまざまなタスクごとにメソッドを定義します。
def create_portal(request, object_id):
portal = Portal.objects.get(pk=object_id)
# create the portal
portal.save()
def carry_cube(request, object_id):
# load, move the cube and save
@permission_required('cake.can_eat')
def eat_cake(request, object_id):
# this will only be performed if the current user has the required permissions
# load, eat the delicious cake and save
うまくいけば、その情報は役に立ちます。あなたの側からより多くの情報を提供することで、より詳細な回答を提供しやすくなります。