gpt4 book ai didi

django 在自定义管理器中访问相关模型状态

转载 作者:行者123 更新时间:2023-12-05 05:12:09 24 4
gpt4 key购买 nike

我在 Django 中使用 model_utils 库。

我有两个模型,如下图所示

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,
)

BookPage 模型都有 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,它会导致“循环导入”。

谢谢。

最佳答案

If I import from .models import Book, it will cause "circular imports".

这是正确的,但是我们可以绕过它,我们可以在方法中将导入推迟到我们需要的时候,比如:

# app/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):
<b>from .models import Book</b> # no circular imports
return self.filter(
book__status=<b>Book.STATUS_CHOICES.public</b>,
status=self.model.STATUS_CHOICES.public
)

关于django 在自定义管理器中访问相关模型状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54852902/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com