我正在学习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&#39;对象没有属性&#39; count&#39;
我尝试了许多排列,但我被卡住了。
答案 0 :(得分:4)
目前,您正在创建一个以NameDetails
为用户的全新request.user
实例。相反,您应该在数据库中查询当前用户的现有NameDetails
,并对其进行计数。您可以通过NameDetails.objects
:
name_details_count = NameDetails.objects.filter(user=self.request.user).count()
答案 1 :(得分:4)
在你的get_context_data函数中应该是这样的:
name_details_count = NameDetails.objects.filter(user=self.request.user).count()
答案 2 :(得分:2)
每次你需要创建Django QuerySet时,你需要通过对象管理器对象所以:NameDetails.objects.
为了进行计数,你需要一个列表,这样你就可以使用{{1 }}:
filter
如果您需要一个元素,请使用name_details_count = NameDetails.objects.filter(user=self.request.user).count()
:
get
重定向更好地使用HttpResponseRedirect并确保设置中的链接正确无误:
name_details_count = NameDetails.objects.get(user=self.request.user)
答案 3 :(得分:2)
这是一个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))