如何在Django Shell中调用模型方法?
我有一个简单的模型,如下所示:
from django.db import models
class Publisher(models.Model):
name = models.CharField(max_length=30)
address = models.CharField(max_length=50)
city = models.CharField(max_length=60)
state_province = models.CharField(max_length=30)
country = models.CharField(max_length=50)
website = models.URLField()
def getJustDomainName(self):
""" for example, if website is http://www.someweb.com/index.html, return someweb.com """
return '0'; #TODO
我这里没有实际实现名为 getJustDomainName
的方法,因为我只是用这个作为例子。
我想在 Django Shell 中测试这个方法。所以我尝试做了类似这样的事情:
Publisher.objects.all()[0].getJustDomainName
但是我得到的结果是:
<bound method Publisher.getJustWebsiteName of <Publisher: Publisher(#1): RandomHouse>>
这并不是我所期待的结果。我希望(并且想要)得到的是这个函数返回的结果。
我该如何在 shell 中正确调用这个模型方法呢?
1 个回答
11
你没有调用这个方法。你需要这样做:
Publisher.objects.all()[0].getJustDomainName()
注意最后的括号 ()
。你现在的做法只是打印出这个方法本身(<bound method...
等等并不是错误。它只是告诉你这个方法的情况,而不是执行它。要执行它,你需要像调用任何函数那样加上 ()
)。
附言:
我猜你是个刚接触Python的JavaScript(或者其他语言)开发者(你的问题涉及非常基础的Python,你使用了驼峰命名法,并且在行末加了不必要的 ;
)。虽然 ;
通常是可以的,但要知道在Python中,函数和方法的命名习惯是用 _
,比如 get_just_domain_name
而不是 getJustDomainName
(而且我会完全去掉那个 just
,因为它多余)。这两种写法都是有效的,只是语言的常见习惯不同而已。