我正在使用 django,但收到此错误:“必须使用 SocialUrl 实例作为第一个参数调用未绑定(bind)方法 create()(没有任何内容)”。我在这里阅读了同一问题的几个答案,但我不确定他们是否和我做同样的错误。
这是包含我尝试调用的方法的模型:
from django.db import models
class SocialUrl(models.Model):
code = models.CharField(max_length=30)
def create():
socialUrl = SocialUrl(code = generateCode())
socialUrl.save()
return socialUrl
def __unicode__(self):
return self.code
这是尝试调用 SocialUrl.create() 的方法:
from django.shortcuts import render
from django.template import RequestContext
from .general import generateCode
from .models import SocialUrl
def test(request):
socialUrl = SocialUrl.create()
#print(SocialUrl.objects.all())
return render(request, 'test.html', RequestContext(request, {"title": socialUrl.code}))
这是堆栈跟踪:
Environment:
Request Method: GET
Request URL: http://127.0.0.1:8000/su/asdadsf
Django Version: 1.6.2
Python Version: 2.7.6
Installed Applications:
('django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'SocialUrl')
Installed Middleware:
('django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware')
Traceback:
File "C:\Users\Sverker\.virtualenvs\coomba\lib\site- packages\django\core\handlers\base.py" in get_response
114. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:\Users\Sverker\Dropbox\Coomba\SbrgCoomba\SocialUrl\views.py" in test
8. socialUrl = SocialUrl.create()
Exception Type: TypeError at /su/asdadsf
Exception Value: unbound method create() must be called with SocialUrl instance as first argument (got nothing instead)
如果有帮助,我们将不胜感激:)
最佳答案
在调用类上的方法之前,您需要实例化该类。将您的 View 更改为:
from django.shortcuts import render
from django.template import RequestContext
from .general import generateCode
from .models import SocialUrl
def test(request):
socialUrl = SocialUrl()
socialUrl.create()
#print(SocialUrl.objects.all())
return render(request, 'test.html', RequestContext(request, {"title": socialUrl.code}))
请注意如何首先实例化对象 (socialUrl = SocialUrl()
),然后在已实例化的对象上运行 create。 (socialUrl.create()
)。
但是,我不确定您的创建方法是否会按您的预期工作。您想通过 create
方法实现什么目的?
编辑以解决评论:
我不熟悉Java静态方法,但我认为你想要做的标准方法如下:
首先,像您所做的那样定义您的模型。请注意,我删除了 create 方法。
from django.db import models
class SocialUrl(models.Model):
code = models.CharField(max_length=30)
def __unicode__(self):
return self.code
然后,在您的 View 中实例化一个模型并使用您想要的属性填充它。
from django.shortcuts import render
from django.template import RequestContext
from .general import generateCode
from .models import SocialUrl
def test(request):
my_code = generateCode()
socialUrl = SocialUrl()
socialUrl.code = my_code # Setting code attribute to the result of your generateCode function
socialUrl.save() # Saves instance of SocialUrl to database.
return render(request, 'test.html', RequestContext(request, {"title": socialUrl.code}))
关于django - 必须使用实例作为第一个参数来调用未绑定(bind)方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23169248/