django 对象没有属性 'count'

django object has no attribute 'count'

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

我有一个视图:create_document.py,我想在其中计算模型 class 中名称详细信息的数量: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 向导。我想确保用户在创建文档之前有超过 1 个名称:

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'

我尝试了很多排列,但我卡住了。

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

查询数据库
name_details_count = NameDetails.objects.filter(user=self.request.user).count()

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

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

每次你需要做一个 Django QuerySet 你必须通过对象管理器 objects 所以 : 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 并确保设置中的 link 正确:

return HttpResponseRedirect(settings.MENU_DETAIL_LINK_NAME_DETAILS)

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

您的线路:

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

正在调用 NameDetailsclass 的 构造函数 并试图调用函数 count 上面不存在(因此是错误类型)。

要获取该用户的所有 NameDetails 个实例的 list,您使用:

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

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

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