django - 必须使用实例作为第一个参数来调用未绑定(bind)方法

标签 django

我正在使用 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/

相关文章:

python - 有什么办法可以在特定的时间运行特定的功能吗?

Django Query、Distinct 和 Order_By 组合不起作用

django i18n 在 mac 中不工作

python - 为什么我的 tastypie 缓存没有被调用?

django - 公开之前如何预热Django Web服务?

python - 创建 Django 模型或更新(如果存在)

django - 是否可以在该用户登录后查看该用户是否为首次登录? - Django

python - Django ValidationError 仅显示一个错误

django - 如何应用节流只是为了在 DRF View 集中创建 Action ?

django - 从 celery_beat 中删除项目不会将它们从数据库计划中删除