Django 对象没有属性'count'



我正在学习django/python,但遇到了一个问题。

我有一个视图:create_document.py,我想在其中计算模型类的名称详细信息的数量:NameDetails

我找不到正确的语法!

这是我的models.py代码:

class NameDetails(FillableModelWithLanguageVersion):
    user = models.ForeignKey(User)
    name_details_prefix_title = models.CharField(null=True, blank=True, max_length=25)
    name_details_first_name = models.CharField(null=False, blank=False, max_length=50)
    name_details_middle_name = models.CharField(null=True, blank=True, max_length=100)
    ....

这是我的create_document.py代码,其中有一个django向导。我想确保用户在创建文档之前有多个名称:

from app_name.core.models import NameDetails
class CreateDocumentWizard(SessionWizardView):
    template_name = 'documents/document_create.html'
    form_list = [
        core_forms.CreateDocumentWizardForm01,
        core_forms.CreateDocumentWizardForm02,
        core_forms.CreateDocumentWizardForm03,
        core_forms.CreateDocumentWizardForm04,
    ]
    def get_form_kwargs(self, step=None):
        kwargs = super(CreateDocumentWizard, self).get_form_kwargs(step)
        kwargs.setdefault('user', self.request.user)
        return kwargs
    def get_context_data(self, form, **kwargs):
        name_details_count = NameDetails(user=self.request.user).count()
        if name_details_count < 1:
            return redirect(settings.MENU_DETAIL_LINK_NAME_DETAILS)

当我使用该行来确定用户的NameDetails计数:name_details_count = NameDetails(user=self.request.user).count()时,我得到以下错误:

NameDetails"对象没有属性"count"

我试过很多种排列方式,但都被卡住了。

在get_context_data函数中应该是这样的:

name_details_count = NameDetails.objects.filter(user=self.request.user).count()

目前您正在创建一个以request.user为用户的全新NameDetails实例。相反,您应该在数据库中查询当前用户的现有NameDetails,并对其进行计数。您可以通过NameDetails.objects:查询数据库

name_details_count = NameDetails.objects.filter(user=self.request.user).count()

每次需要创建Django QuerySet时,都必须通过对象管理器对象所以:NameDetails.objects.要进行计数,需要一个列表,所以使用filter:

name_details_count = NameDetails.objects.filter(user=self.request.user).count()

如果你需要一个元素,你可以使用get:

name_details_count = NameDetails.objects.get(user=self.request.user)

对于重定向,请使用更好的HttpResponseRedirect并确保设置中的链接正确:

return HttpResponseRedirect(settings.MENU_DETAIL_LINK_NAME_DETAILS)

这是一个Python,或者更普遍地说,是一个编程问题。

您的线路:

name_details_count = NameDetails(user=self.request.user).count()

正在调用NameDetails类的构造函数,并试图调用其上不存在的函数count(因此为错误类型)。

要获得该用户的所有NameDetails实例的列表,请使用:

name_details = NameDetails.objects.filter(user=self.request.user)

要获得该列表中的项目数,您可以简单地使用python内置的len()函数,如下所示:

name_details_count = len(NameDetails.objects.filter(user=self.request.user))

如果想要集合中的所有recodes计数(没有任何过滤器),请使用this:

from pymongo import MongoClient
cl = pymongo.MongoClient(host="localhost", port=27017)
db = cl["database_name"]
print(db.get_collection("collection_name").estimated_document_count())

最新更新