Абстрактная модель Django с индексами, ограничениями и разрешениями: атрибуты не наследуются подклассамиPython

Программы на Python
Ответить
Anonymous
 Абстрактная модель Django с индексами, ограничениями и разрешениями: атрибуты не наследуются подклассами

Сообщение Anonymous »

Я использую Django 3.2
У меня есть следующие модели:
app1

Код: Выделить всё

class IsPinnable(models.Model):
is_pinned = models.BooleanField(default=False)
pin_after_expiry_day_count = models.DurationField(default=0)

class Meta:
abstract = True
indexes = [
models.Index(fields=['is_pinned']),
]

class IsModeratable(models.Model):
approved = models.BooleanField(default=False)
target_count_trigger = models.PositiveSmallIntegerField()
positive_pass_count = models.PositiveSmallIntegerField(default=0)
negative_pass_count = models.PositiveSmallIntegerField(default=0)

# Other fields and methods ...

def save(self, *args, **kwargs):
# TODO: Sanity check on pass_count and trigger sizes
# ...
super().save(*args, **kwargs)

class Meta:
abstract = True
permissions = (
("moderate_item", "can moderate item"),
("reset_moderation", "can (re)moderate a moderated item"),
)
indexes = [
models.Index(fields=['approved']),
]

class MyComponent(IsPinnable, IsModeratable):
# some fields and methods ...

class Meta(IsPinnable.Meta, IsModeratable.Meta):
abstract = True
# other stuff ...
приложение2

Код: Выделить всё

from app1.models import MyComponent

class Foo(MyComponent):
# some fields and methods ...
class Meta(MyComponent.Meta):
abstract = False

Теперь я знаю, что классы абстрактной модели не создаются в базе данных, поэтому изначально я ожидал, что Django выдаст исключение при попытке выполнить миграцию. – к моему удивлению, мне удалось выполнить миграцию && мигрировать.
Однако, когда я проверил базу данных (через psql), я обнаружил, что, хотя таблица app2_foo содержала все поля, описанные в ее родительском элементе class, индексы не переносились из родительских классов, как следует из документации.
Что мне не хватает? и как мне получить индексы, ограничения и разрешения, определенные в родительских классах, для распространения на подклассы?

Подробнее здесь: https://stackoverflow.com/questions/675 ... ibutes-are
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»