#python #django #shell #django-1.5
#python #django #оболочка #django-1.5
Вопрос:
У меня есть простая модель, такая как
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. Итак, я попытался сделать что-то вроде;
Publisher.objects.all()[0].getJustDomainName
но в ответ я получаю
<bound method Publisher.getJustWebsiteName of <Publisher: Publisher(#1): RandomHouse>>
это не то, чего я ожидал. Я ожидаю (и желаю) результата, который возвращает то, что возвращает функция.
Как мне правильно вызвать этот метод модели из оболочки?
Ответ №1:
Вы не вызываете метод. Вам нужно сделать:
Publisher.objects.all()[0].getJustDomainName()
обратите внимание на скобку ()
в конце. То, как вы делаете это сейчас, просто выводит сам метод ( <bound method...
и т.д.). Это не ошибка. Он просто сообщает вам о методе, вместо того, чтобы запускать его, что вы делаете с ()
, как вы бы делали с любой функцией).
p.s.
Я предполагаю, что вы разработчик javascript (или что-то в этом роде), который новичок в python (ваш вопрос касается самого базового python, вы используете верблюжью оболочку и ненужный ;
в конце строки). ;
Обычно это нормально, но знайте, что соглашение в python заключается в использовании _
для функций и методов, т.Е. get_just_domain_name
вместо getJustDomainName
(и я бы от этого just
полностью избавился, это избыточно). Оба допустимы, это просто общее соглашение языка.