django中的管理器功能有问题

django中的管理器功能有问题,django,django-models,Django,Django Models,设计代码来处理称为“contractBundles”的对象的传输。在“合同”应用程序中的models.py中包含以下内容: 在其他地方,我想让人们通过按下按钮来购买捆绑包: from contracts import models as cmodels ... if request.method == 'POST': ... elif 'Buy' in request.POST: [set up activeUser, polName

设计代码来处理称为“contractBundles”的对象的传输。在“合同”应用程序中的models.py中包含以下内容:

在其他地方,我想让人们通过按下按钮来购买捆绑包:

from contracts import models as cmodels
...
 if request.method == 'POST':
          ...
        elif 'Buy' in request.POST:
            [set up activeUser, polName, amount]
            cmodels.contractBundle.objects.add(user=activeUser, contractName=polName, amount=amount)
但是,当代码调用
contractBundle.objects.add()
方法时,我得到以下错误:

AttributeError at [url]
'Manager' object has no attribute 'add'
Request Method: POST
Request URL:    [url]
Django Version: 1.3.1
Exception Type: AttributeError
Exception Value:    
'Manager' object has no attribute 'add'
Exception Location: ...views.py in [method], line 56
Python Executable:  /System/Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python
Python Version: 2.7.1

你知道为什么会发生这种情况吗?

这里有几件事是错误的

#model
class contractBundle(models.Model):
    objects = models.Manager( )
    contact_bundle_manager = contractBundleManager( )
#view
cmodels.contact_bundle_manager.add(user=activeUser, contractName=polName, amount=amount)
首先,您的manager类需要从模型继承。manager:

class contractBundleManager(models.Manager):
这里定义了所有代码,如
create

另外,使用类/类型作为函数参数的默认值似乎是一个非常糟糕的主意。如果要记录函数需要的类型,应该使用docstring

评论后编辑不,我指的不是return语句,也不是你调用self.create的方式。我指的是
contractBundleManager.add方法中的默认值。你不应该这样做。如果有人在未传递
user
参数的情况下调用您的方法,则函数将使用您定义的默认值-这是一个类。Python中的类是可变的,因此函数实际上会修改
Player
类的定义


实际上,这不是显示调用函数的正确类型的方法。省去默认值,使用docstring。

这里有两件事是错误的

首先,您的manager类需要从模型继承。manager:

class contractBundleManager(models.Manager):
这里定义了所有代码,如
create

另外,使用类/类型作为函数参数的默认值似乎是一个非常糟糕的主意。如果要记录函数需要的类型,应该使用docstring

评论后编辑不,我指的不是return语句,也不是你调用self.create的方式。我指的是
contractBundleManager.add方法中的默认值。你不应该这样做。如果有人在未传递
user
参数的情况下调用您的方法,则函数将使用您定义的默认值-这是一个类。Python中的类是可变的,因此函数实际上会修改
Player
类的定义


实际上,这不是显示调用函数的正确类型的方法。省去默认值,使用docstring。

谢谢,这使它向前移动,但现在它告诉我没有属性“create”--这不应该是所有对象的硬连接吗?谢谢,这使它向前移动,但现在它告诉我没有属性“create”--这不应该是所有对象的硬连接吗?还有,使用类/类型作为函数参数的默认值似乎是一个非常糟糕的主意。我假设您指的是
return self.create(合同=c,数量=amount,所有者=user)
?为什么是这种糟糕的形式?另外,使用类/类型作为函数参数的默认值似乎是一个非常糟糕的主意。我假设您指的是
return self.create(合同=c,数量=amount,所有者=user)
?为什么这是糟糕的形式?