permissions
permissionsПараметр permissions в Meta классе модели Django указывает список настраиваемых разрешений для модели. Настраиваемые разрешения используются для управления доступом к определенным действиям над экземплярами модели, такими как добавление, изменение или удаление экземпляров.
Каждое разрешение указывается в виде кортежа, где первый элемент представляет собой строку, используемую в качестве кодового имени разрешения, а второй элемент представляет собой удобочитаемое имя разрешения.
Например, чтобы добавить к Employee модели настраиваемые разрешения для добавления и удаления экземпляров, вы можете указать в классе следующее Meta:
class Employee(models.Model):
first_name = models.CharField(max_length=100)
last_name = models.CharField(max_length=100)
age = models.SmallIntegerField(null=True)
created = models.DateTimeField(default=timezone.now)
work_experience = models.SmallIntegerField(default=0)
contact = models.OneToOneField(Contact, on_delete=models.CASCADE, null=True)
department = models.ForeignKey(Department, on_delete=models.CASCADE, default=None)
compensations = models.ManyToManyField(Compensation)
class Meta:
permissions = [
('add_employee', 'Can add Employee'),
('delete_employee', 'Can delete Employee'),
]
После определения этих настраиваемых разрешений вы можете назначать их пользователям или группам с помощью административного интерфейса Django или программно, используя структуру аутентификации Django.
Обратите внимание, что Django также определяет ряд разрешений по умолчанию для каждой модели, таких как view, change и delete, которые автоматически создаются и управляются при создании модели. Этот permissions параметр используется для добавления дополнительных настраиваемых разрешений помимо этих значений по умолчанию.
default_permissions
Параметр default_permissions в Meta классе модели Django указывает набор разрешений по умолчанию, который будет создан для модели. Разрешения по умолчанию в Django включают add, change и delete.
По умолчанию Django создает эти разрешения для каждой модели в приложении. Однако вы можете установить default_permissions в [] классе Meta модели, чтобы отказаться от создания этих разрешений по умолчанию для этой модели.
Например, чтобы отказаться от разрешений по умолчанию для Employee модели, вы можете указать в классе следующее Meta:
class Employee(models.Model):
first_name = models.CharField(max_length=100)
last_name = models.CharField(max_length=100)
age = models.SmallIntegerField(null=True)
created = models.DateTimeField(default=timezone.now)
work_experience = models.SmallIntegerField(default=0)
contact = models.OneToOneField(Contact, on_delete=models.CASCADE, null=True)
department = models.ForeignKey(Department, on_delete=models.CASCADE, default=None)
compensations = models.ManyToManyField(Compensation)
class Meta:
default_permissions = []
С этим параметром при создании Employee модели разрешения по умолчанию создаваться не будут. Если вам по-прежнему необходимо предоставить разрешение определенным пользователям или группам для выполнения действий с экземплярами этой модели, вы можете использовать параметр permissions в Meta классе для определения настраиваемых разрешений.
Пример использования default_permissions опции в Meta классе модели Django:
default_permissions = ['add', 'change']
В этом примере для модели будут созданы только разрешения add и change по умолчанию. Разрешение delete не будет создано, так как оно не включено в default_permissions список.
proxy
Параметр proxy в Meta классе модели Django указывает, следует ли использовать модель в качестве прокси-модели. Прокси-модель — это модель, которая наследует все поля, методы и параметры от другой модели, но может рассматриваться как отдельная модель в Django ORM.
По умолчанию модель в Django не является прокси-моделью. Однако вы можете установить proxy в True классе Meta модели, чтобы сделать ее прокси-моделью.
Например, чтобы сделать Employee модель прокси-моделью, вы можете указать в классе следующее Meta:
class Employee(models.Model):
first_name = models.CharField(max_length=100)
last_name = models.CharField(max_length=100)
age = models.SmallIntegerField(null=True)
created = models.DateTimeField(default=timezone.now)
work_experience = models.SmallIntegerField(default=0)
contact = models.OneToOneField(Contact, on_delete=models.CASCADE, null=True)
department = models.ForeignKey(Department, on_delete=models.CASCADE, default=None)
compensations = models.ManyToManyField(Compensation)
def __str__(self):
return f'{self.first_name} {self.last_name}'
class LatestEmployee(Employee):
class Meta:
proxy = True
ordering = ['-created']
В этом примере Employee модель определяет поля, методы и параметры, которые LatestEmployee унаследует прокси-модель. Модель LatestEmployee создается путем установки proxy в True ее Meta классе.
Модель LatestEmployee можно использовать так же, как и любую другую модель в Django ORM, но она обращается к тем же данным, которые хранятся в таблице для Employee модели. В этом примере LatestEmployee модель изменяет порядок данных по умолчанию по дате публикации в порядке убывания.
Обратите внимание, что при создании прокси-модели вам не нужно переопределять все поля, методы и параметры базовой модели. Вам нужно только указать различия между прокси-моделью и базовой моделью в классе Meta и других частях определения модели.
Несколько примеров ORM-запросов для моделей Employee и LatestEmployee из предыдущего примера: