我有一個我創建的Django應用程序,它使用Django Guardian來管理對象級權限,Django South來管理遷移。我創建了一個模型混合模型,它允許模型使用自定義的Meta屬性定義在創建時分配的對象級權限。因此,例如一個Message
模型可能看起來像:Django South遷移無法訪問自定義模型元屬性
class Message(AutoUserPermissionsMixin, models.Model):
sender = models.ForeignKey(User)
recipient = models.ForeignKey(User)
text = models.TextField(blank=True)
class Meta:
permissions = (
('view_message', 'Can view message'),
('respond_to_message', 'Can respond to message'),
)
user_permissions_to_add = {
'recipient' : ('view_message', 'respond_to_message',),
'sender' : ('view_message',)
}
的AutoUserPermissionsMixin
定義自定義save()
讀取模型的元知道哪些對象級權限應user_permissions_to_add
被分配到哪個領域,不分配。我在文件上做這個添加的自定義字段元,我定義AutoUserPermissionsMixin
:
from django.db import models
models.options.DEFAULT_NAMES += ('user_permissions_to_add',)
的問題是,我試圖做在南數據遷移創造了一些新的模式的情況下,並且它不分配對象級權限,因爲自定義save()
方法不在遷移中處理。
現在我可以使用自定義save()
中使用的相同方法嘗試應用模型中的權限,即sync_object_permissions(instance, permissions)
。我想在的權限中讀取他們在遷移時在Meta上的狀態的權限,而不是將它們硬編碼到遷移中。然而,試圖調用sync_object_permissions(message_instance, permissions=message_instance._meta.user_permissions_to_add)
時,南引發錯誤:
AttributeError: 'Options' object has no attribute 'user_permissions_to_add'
所以,出於某種原因,元是不是被更新我的自定義user_permissions_to_add
在遷移的時間屬性。我如何確保它在遷移中的Meta中存在?