簡體   English   中英

Django找不到正確的查詢集

[英]Django can't find the right queryset

class TimeStampedModel(models.Model):
    created = DateTimeField(_('created'), auto_now=False, auto_now_add=True)
    modified = DateTimeField(_('modified'), auto_now=True, auto_now_add=False)

    class Meta:
        abstract = True


class TimeFramedModel(models.Model):
    start = models.DateTimeField(_('start'), null=True, blank=True)
    end = models.DateTimeField(_('end'), null=True, blank=True)

    class Meta:
        abstract = True


class EntryQueryset(QuerySet):

    def published(self):
        return self.filter(self.status == 'published')


class EntryManger(models.Manager):

    def get_query_set(self):
        print 'using right custom manager'
        return EntryQueryset(self.model, using=self._db)

class Entry(TimeStampedModel, TimeFramedModel):

    status = models.CharField(
        _('status'), choices=STATUS_CHOICES, max_length=16,
        default='draft')
    objects = EntryManger()

當我執行Entry.objects.published() ,出現錯誤。 它抱怨“ EntryManger”對象沒有“發布”屬性,

沒有使用“使用正確的自定義經理”的文本。

是什么導致此錯誤? 謝謝!

Entry.objects是管理器,而不是查詢集。 您將published放入自定義查詢集中,因此需要執行Entry.objects.all().published()Entry.objects.get_queryset().published()

您也沒有正確實施published 應該更像是:

class EntryQueryset(QuerySet):

    def published(self):
        return self.filter(status='published')

您的方法published()應該位於EntryManager類上,不需要創建新的QuerySet類(通常僅當您想更深入地研究如何從數據庫中獲取數據時)。

正確的解決方案是:

class EntryManger(models.Manager):
    def published(self):
        print 'using right custom manager'
        return self.filter(self.status == 'published')

您可以完全刪除EntryQuerySet類。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM