我的理解是使用语法:
from foo import y
将从foo.py导入类y
如果这是真的,为什么我要使用以下选项:
型号.py
from django.db import models
from .utils import codeGenerator, createShortcode
class KirrUrlManager(models.Manager):
def all(self, *args, **kwargs):
qs_main = super(KirrUrlManager, self).all(*args, **kwargs)
qs = qs_main.filter(active=True)
return qs
def refreshShortCodes(self):
qs = KirrUrl.objects.filter(id__gte=1) #id_gte is primary key
newCodes = 0
for q in qs:
q.shortcode = createShortcode(q)
q.save()
newCodes +=1
return "new codes made: {i} ".format(i=newCodes)
class KirrUrl(models.Model):
url = models.CharField(max_length=220, unique=True)
shortcode = models.CharField(max_length=50, unique=True, blank = True)
timestamp = models.DateTimeField(auto_now=True,)
timestamp = models.DateTimeField(auto_now_add=True,)
active = models.BooleanField(default=True,)
objects = KirrUrlManager()
def save(self, *args, **kwargs):
if self.shortcode is None or self.shortcode =="":
self.shortcode = createShortcode(self)
super(KirrUrl, self).save(*args, **kwargs)
def __str__(self):
return str(self.url)
foo.py公司
from django.core.management.base import BaseCommand, CommandError
from shortener.models import KirrUrl
class Command(BaseCommand):
help = "refreshes all shortcodes"
def handle(self, *args, **options):
return KirrUrl.objects.refreshShortCodes()
我不确定为什么能够在foo.py中调用方法“refreshShortCodes()”。我只使用import语句“from shortener.models import KirrUrl”。这个import语句不应该只让我导入KirrUrl类吗?refreshShortCodes()不是KirrUrl类的一部分,但是它是要导入的models.py文件
是的,这正是
import
语句所做的objects.refreshShortCodes()
是KirrUrl
类的一部分。因此您可以访问类名及其属性当Python导入一个类时,它会导入整个类对象。这意味着可以访问类命名空间中定义的所有变量和方法。因此,由于您在
KirrUrl
类中创建了一个KirrUrlManager()
实例,因此可以通过首先获取KirrUrlManager()
实例来访问refreshShortCodes()
方法:然后从
KirrUrlManager()
实例获取refreshShortCodes()
方法:你只需要导入类就可以访问它的属性;不能导入封装在类中的对象
因此,在导入类
KirrUrl
之后,模型管理器objects
可以通过类访问,而方法refreshShortCodes
同样可以通过类KirrUrl
中组成的模型管理器实例访问这是通过导入机制无法访问的对象的方式之一;点引用
相关问题 更多 >
编程相关推荐