如何在Django Shell中调用模型方法?

1 投票
1 回答
5265 浏览
提问于 2025-04-18 12:15

我有一个简单的模型,如下所示:

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,因为它多余)。这两种写法都是有效的,只是语言的常见习惯不同而已。

撰写回答