0

我是 python 新手,并关注 youtube 视频来学习如何编码。但现在我遇到了问题。我试图编写自定义 django-admin 命令'refreshcodes'。这是我位于 src/shortener/managment/commands/refreshcodes.py 中的文件:

from django.core.management.base import BaseCommand, CommandError

from shortener.models import KirrURL

class Command(BaseCommand):
    help = 'Refreshes all KirrURL shortcodes'

    def handle(self, *args, **options):
        return KirrURL.objects.refresh_shortcodes() 

这是缩短器/models.py:

import random
import string
from django.db import models
from .utils import code_generator, create_shortcode
# Create your models here.


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 refresh_shortcodes(self):
        qs = KirrURL.objects.filter(id__gte=1)
        new_codes = 0
        for q in qs:
            q.shortcode = create_shortcode(q)
            print (q.shortcode)
            q.save()
            new_codes += 1
        return "New codes made: {i}".format(i=new_codes)



class KirrURL(models.Model):
    url         = models.CharField(max_length=220, )
    shortcode   = models.CharField(max_length=15, unique=True, blank=True)
    updated     = models.DateTimeField(auto_now=True) #everytime model is saved
    timestamp   = models.DateTimeField(auto_now_add=True) #when model was created
    active      = models.BooleanField(default=True)
    #empty_datetime = models.DateTimeField(auto_now=False, auto_now_add=False)
    #shortcode = models.CharField(max_length=15, null=True) Empty in database is ok
    #shortcode = models.CharField(max_length=15, default='cfedefaultshortcode')

    objects = KirrURLManager()

    #some_random = KirrURLManager()

    def save(self, *args, **kwargs):
        if self.shortcode is None or self.shortcode == "":
            self.shortcode = create_shortcode(self)
        super(KirrURL, self).save(*args, **kwargs)
    #def my_save(self):
    #   self.save()
    def __str__(self):
        return str(self.url)

所以,当我尝试运行 python manage.py 刷新代码时,我遇到了一个错误:

未知命令:'refreshcodes' 输入“manage.py help”以供使用。

然后我注意到在 refreshcodes.py 中,shorterer.models 有下划线,所以我尝试使用 Pycharm 帮助菜单修复它。Pycharm错误:

Collecting models
  Using cached models-0.9.3.tar.gz
    Complete output from command python setup.py egg_info:
    Traceback (most recent call last):
      File "<string>", line 1, in <module>
      File "/private/var/folders/3d/xgytpbqn7k113z6fx_jxdq9r0000gn/T/pycharm-packaging0.tmp/models/setup.py", line 25, in <module>
        import models
      File "/private/var/folders/3d/xgytpbqn7k113z6fx_jxdq9r0000gn/T/pycharm-packaging0.tmp/models/models/__init__.py", line 23, in <module>
        from base import *
    ImportError: No module named 'base'

    ----------------------------------------

Command "python setup.py egg_info" failed with error code 1 in /private/var/folders/3d/xgytpbqn7k113z6fx_jxdq9r0000gn/T/pycharm-packaging0.tmp/models/

请帮帮我!我正在使用 django 1.10.2 和 python 3.5.2。

4

0 回答 0