Я использую библиотеку model_utils
в Django.
У меня есть две модели, как показано ниже
class Book(TimeStampedModel):
STATUS_CHOICES = Choices(
(0, 'public', _('public')),
(1, 'private', _('private')),
)
status = models.IntegerField(
verbose_name=_('status'),
choices=STATUS_CHOICES,
default=STATUS_CHOICES.public,
db_index=True,
)
class Page(MPTTModel, AbstractPage):
STATUS_CHOICES = Choices(
(0, 'draft', _('draft')),
(1, 'public', _('public')),
(2, 'private', _('private')),
)
status = models.IntegerField(
verbose_name=_('status'),
choices=STATUS_CHOICES,
default=STATUS_CHOICES.public,
db_index=True,
)
book = models.ForeignKey(
'book.Book',
verbose_name=_('book'),
related_name='pages',
db_index=True,
on_delete=models.CASCADE,
)
Обе модели Book
и Page
имеют поле status
.
У меня есть два пользовательских класса наборов запросов в managers.py
.
class BookQuerySet(models.QuerySet):
def public(self):
return self.filter(status=self.model.STATUS_CHOICES.public)
class PageQuerySet(models.QuerySet):
def public(self):
return self.filter(book__status=0,
status=self.model.STATUS_CHOICES.public)
Как показано выше, book__status=0
этот код, безусловно, работает, но я немного расстроен, потому что яхотелось бы использовать код, подобный self.book.model.STATUS_CHOICES.public
.
. Расскажите, пожалуйста, как получить доступ к свойству объекта связанной модели.
Если я импортирую from .models import Book
, это вызовет "циклический импорт".
Спасибо.