0

外部キーによってリンクされている2つのリソースがあります

AJobを作成/変更するときにAUserリソースを読み取り専用にしたい

class AUser(ModelResource):
    class Meta:
        queryset = User.objects.all()
        resource_name = 'user'
        authentication = SessionAuthentication()
        authorization = Authorization()
        excludes = ['email', 'password', 'is_superuser', 'is_staff', 'is_active', 'date_joined', 'last_login']
    def can_update(self):
        return False  
    def can_create(self):
        return False
    def can_delete(self):
        return False
    def apply_authorization_limits(self, request, object_list):
        return object_list.filter(pk=request.user.pk)

class AJob(ModelResource):
    user = fields.ForeignKey( AUser, 'user', full=True)
    paused = fields.BooleanField(attribute='isPaused', readonly=True)
    hasRules = fields.BooleanField(attribute='hasRules', readonly=True)
    class Meta:
        queryset = Job.objects.all()
        resource_name = 'job'
        authentication = SessionAuthentication()
        api_name = 'v1'
        authorization = Authorization()
        allowed_methods = ['get', 'post', 'delete']

    def obj_create(self, bundle, request=None, **kwargs):
        return super(AJob, self).obj_create(bundle, request, user=request.user)

    def apply_authorization_limits(self, request, object_list):
        return object_list.filter(user=request.user)

readonly = TrueをforeignKeyに直接追加しようとしましたが、水和時に無視され、ユーザーがnullであるため、制約違反が発生します

POSTAJobリクエストに追加する場合

"user":{"id": "5"、 "is_staff":false}

5が現在のユーザー

ユーザーモデルが更新され、管理者の役割が削除されます

save_relatedを実行するときのtastypieは認証をチェックしないようです

このユーザーリソースを読み取り専用にするにはどうすればよいですか?

tastypiev0.9.12-alphaを使用しています

4

1 に答える 1

2

save_relatedリソース内のメソッドを変更AJobし、変更しないように定義できますAUser。必要に応じてForeignKeyが読み取り専用になるように定義できますが、dehydrate_userメソッドを指定して、内部で返したい値を取得する必要があります。のようなものになりますreturn bundle['data'].user

于 2012-09-24T09:07:30.660 に答える