Tôi đang cố gắng thêm một thuộc tính Meta động cho tất cả các mô hình Django của tôi bằng cách sử dụng mô hình kế thừa, nhưng tôi không thể làm cho nó hoạt động. Tôi có một phép mà tôi muốn thêm vào tất cả các mô hình của tôi như thế này:Thuộc tính Meta động cho Mô hình Django?
class ModelA(models.Model):
class Meta:
permisssions =(('view_modela','Can view Model A'),)
class ModelB(models.Model):
class Meta:
permisssions =(('view_modelb','Can view Model B'),)
Tôi đã cố gắng tạo ra một lớp cơ sở trừu tượng như thế này:
class CustomModel(models.Model):
def __init__(self, *args, **kwargs):
self._meta.permissions.append(('view_'+self._meta.module_name, u'Can view %s' % self._meta.verbose_name))
super(CustomModel,self).__init__(*args, **kwargs)
class ModelA(CustomModel):
....
class ModelB(CustomModel):
...
nhưng nó không làm việc. Đây có phải là cách tiếp cận đúng? Bởi vì Django sử dụng nội tâm để xây dựng các lớp Mô hình, tôi không chắc chắn nếu thêm quyền trong các __init__()
của lớp thậm chí sẽ làm việc. Với việc thực hiện hiện tại của tôi mỗi khi tôi truy cập một cá thể mô hình, nó nối thêm một bộ các quyền khác.
+1 cho một ví dụ về cách viết một metaclass tùy chỉnh trong một câu hỏi django liên quan. công cụ này khó tìm! –
Tôi biết đây là những gì upvotes là cho, và đây là một chủ đề cũ, nhưng ... damn, Jarret. Mức độ kiến thức bách khoa của Django và Python cần thiết để đưa ra câu trả lời này và sau đó giải thích đơn giản và rõ ràng là tâm-boggling. Cảm ơn bạn đã làm cho Internet trở thành một nơi hữu ích hơn. – jfmatt
Tôi không biết bạn là ai, @General_Mayhem, nhưng bạn đã thực hiện năm của tôi. Cảm ơn bạn đã đưa ra nhận xét tốt đẹp về bài đăng cũ như vậy! –