Как вы вызываете метод из модели в оболочке Django?

#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 полностью избавился, это избыточно). Оба допустимы, это просто общее соглашение языка.